/[escript]/branches/diaplayground/ripley/src/Brick.cpp
ViewVC logotype

Diff of /branches/diaplayground/ripley/src/Brick.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

branches/ripleygmg_from_3668/ripley/src/Brick.cpp revision 3777 by caltinay, Thu Jan 19 06:17:38 2012 UTC trunk/ripley/src/Brick.cpp revision 3971 by caltinay, Wed Sep 19 02:55:35 2012 UTC
# Line 13  Line 13 
13    
14  #include <ripley/Brick.h>  #include <ripley/Brick.h>
15  extern "C" {  extern "C" {
16  #include "paso/SystemMatrix.h"  #include <paso/SystemMatrix.h>
17  }  }
18    
19  #if USE_SILO  #if USE_SILO
# Line 29  using namespace std; Line 29  using namespace std;
29    
30  namespace ripley {  namespace ripley {
31    
32  Brick::Brick(int n0, int n1, int n2, double l0, double l1, double l2, int d0,  Brick::Brick(int n0, int n1, int n2, double x0, double y0, double z0,
33               int d1, int d2) :               double x1, double y1, double z1, int d0, int d1, int d2) :
34      RipleyDomain(3),      RipleyDomain(3),
35      m_gNE0(n0),      m_x0(x0),
36      m_gNE1(n1),      m_y0(y0),
37      m_gNE2(n2),      m_z0(z0),
38      m_l0(l0),      m_l0(x1-x0),
39      m_l1(l1),      m_l1(y1-y0),
40      m_l2(l2),      m_l2(z1-z0)
     m_NX(d0),  
     m_NY(d1),  
     m_NZ(d2)  
41  {  {
42        // ignore subdivision parameters for serial run
43        if (m_mpiInfo->size == 1) {
44            d0=1;
45            d1=1;
46            d2=1;
47        }
48    
49        bool warn=false;
50        // if number of subdivisions is non-positive, try to subdivide by the same
51        // ratio as the number of elements
52        if (d0<=0 && d1<=0 && d2<=0) {
53            warn=true;
54            d0=(int)(pow(m_mpiInfo->size*(n0+1)*(n0+1)/((float)(n1+1)*(n2+1)), 1.f/3));
55            d1=(int)(d0*n1/(float)n0);
56            d2=m_mpiInfo->size/(d0*d1);
57            if (d0*d1*d2 != m_mpiInfo->size) {
58                // ratios not the same so leave "smallest" side undivided and try
59                // dividing 2 sides only
60                if (n0>=n1) {
61                    if (n1>=n2) {
62                        d0=d1=0;
63                        d2=1;
64                    } else {
65                        d0=d2=0;
66                        d1=1;
67                    }
68                } else {
69                    if (n0>=n2) {
70                        d0=d1=0;
71                        d2=1;
72                    } else {
73                        d0=1;
74                        d1=d2=0;
75                    }
76                }
77            }
78        }
79        if (d0<=0 && d1<=0) {
80            warn=true;
81            d0=int(sqrt(m_mpiInfo->size*(n0+1)/(float)(n1+1)));
82            d1=m_mpiInfo->size/d0;
83            if (d0*d1*d2 != m_mpiInfo->size) {
84                // ratios not the same so subdivide side with more elements only
85                if (n0>n1) {
86                    d0=0;
87                    d1=1;
88                } else {
89                    d0=1;
90                    d1=0;
91                }
92            }
93        } else if (d0<=0 && d2<=0) {
94            warn=true;
95            d0=int(sqrt(m_mpiInfo->size*(n0+1)/(float)(n2+1)));
96            d2=m_mpiInfo->size/d0;
97            if (d0*d1*d2 != m_mpiInfo->size) {
98                // ratios not the same so subdivide side with more elements only
99                if (n0>n2) {
100                    d0=0;
101                    d2=1;
102                } else {
103                    d0=1;
104                    d2=0;
105                }
106            }
107        } else if (d1<=0 && d2<=0) {
108            warn=true;
109            d1=int(sqrt(m_mpiInfo->size*(n1+1)/(float)(n2+1)));
110            d2=m_mpiInfo->size/d1;
111            if (d0*d1*d2 != m_mpiInfo->size) {
112                // ratios not the same so subdivide side with more elements only
113                if (n1>n2) {
114                    d1=0;
115                    d2=1;
116                } else {
117                    d1=1;
118                    d2=0;
119                }
120            }
121        }
122        if (d0<=0) {
123            // d1,d2 are preset, determine d0
124            d0=m_mpiInfo->size/(d1*d2);
125        } else if (d1<=0) {
126            // d0,d2 are preset, determine d1
127            d1=m_mpiInfo->size/(d0*d2);
128        } else if (d2<=0) {
129            // d0,d1 are preset, determine d2
130            d2=m_mpiInfo->size/(d0*d1);
131        }
132    
133        m_NX=d0;
134        m_NY=d1;
135        m_NZ=d2;
136    
137      // ensure number of subdivisions is valid and nodes can be distributed      // ensure number of subdivisions is valid and nodes can be distributed
138      // among number of ranks      // among number of ranks
139      if (m_NX*m_NY*m_NZ != m_mpiInfo->size)      if (m_NX*m_NY*m_NZ != m_mpiInfo->size)
140          throw RipleyException("Invalid number of spatial subdivisions");          throw RipleyException("Invalid number of spatial subdivisions");
141    
142      if ((n0+1)%m_NX > 0 || (n1+1)%m_NY > 0 || (n2+1)%m_NZ > 0)      if (warn) {
143          throw RipleyException("Number of elements+1 must be separable into number of ranks in each dimension");          cout << "Warning: Automatic domain subdivision (d0=" << d0 << ", d1="
144                << d1 << ", d2=" << d2 << "). This may not be optimal!" << endl;
145        }
146    
147        if ((n0+1)%m_NX > 0) {
148            double Dx=m_l0/n0;
149            n0=(int)round((float)(n0+1)/d0+0.5)*d0-1;
150            m_l0=Dx*n0;
151            cout << "Warning: Adjusted number of elements and length. N0="
152                << n0 << ", l0=" << m_l0 << endl;
153        }
154        if ((n1+1)%m_NY > 0) {
155            double Dy=m_l1/n1;
156            n1=(int)round((float)(n1+1)/d1+0.5)*d1-1;
157            m_l1=Dy*n1;
158            cout << "Warning: Adjusted number of elements and length. N1="
159                << n1 << ", l1=" << m_l1 << endl;
160        }
161        if ((n2+1)%m_NZ > 0) {
162            double Dz=m_l2/n2;
163            n2=(int)round((float)(n2+1)/d2+0.5)*d2-1;
164            m_l2=Dz*n2;
165            cout << "Warning: Adjusted number of elements and length. N2="
166                << n2 << ", l2=" << m_l2 << endl;
167        }
168    
169        m_gNE0=n0;
170        m_gNE1=n1;
171        m_gNE2=n2;
172    
173      if ((m_NX > 1 && (n0+1)/m_NX<2) || (m_NY > 1 && (n1+1)/m_NY<2) || (m_NZ > 1 && (n2+1)/m_NZ<2))      if ((m_NX > 1 && (n0+1)/m_NX<2) || (m_NY > 1 && (n1+1)/m_NY<2) || (m_NZ > 1 && (n2+1)/m_NZ<2))
174          throw RipleyException("Too few elements for the number of ranks");          throw RipleyException("Too few elements for the number of ranks");
# Line 95  Brick::Brick(int n0, int n1, int n2, dou Line 215  Brick::Brick(int n0, int n1, int n2, dou
215    
216  Brick::~Brick()  Brick::~Brick()
217  {  {
218        Paso_SystemMatrixPattern_free(m_pattern);
219        Paso_Connector_free(m_connector);
220  }  }
221    
222  string Brick::getDescription() const  string Brick::getDescription() const
# Line 108  bool Brick::operator==(const AbstractDom Line 230  bool Brick::operator==(const AbstractDom
230      if (o) {      if (o) {
231          return (RipleyDomain::operator==(other) &&          return (RipleyDomain::operator==(other) &&
232                  m_gNE0==o->m_gNE0 && m_gNE1==o->m_gNE1 && m_gNE2==o->m_gNE2                  m_gNE0==o->m_gNE0 && m_gNE1==o->m_gNE1 && m_gNE2==o->m_gNE2
233                    && m_x0==o->m_x0 && m_y0==o->m_y0 && m_z0==o->m_z0
234                  && m_l0==o->m_l0 && m_l1==o->m_l1 && m_l2==o->m_l2                  && m_l0==o->m_l0 && m_l1==o->m_l1 && m_l2==o->m_l2
235                  && m_NX==o->m_NX && m_NY==o->m_NY && m_NZ==o->m_NZ);                  && m_NX==o->m_NX && m_NY==o->m_NY && m_NZ==o->m_NZ);
236      }      }
# Line 115  bool Brick::operator==(const AbstractDom Line 238  bool Brick::operator==(const AbstractDom
238      return false;      return false;
239  }  }
240    
241    void Brick::readBinaryGrid(escript::Data& out, string filename,
242                               const vector<int>& first,
243                               const vector<int>& numValues) const
244    {
245        // check destination function space
246        int myN0, myN1, myN2;
247        if (out.getFunctionSpace().getTypeCode() == Nodes) {
248            myN0 = m_N0;
249            myN1 = m_N1;
250            myN2 = m_N2;
251        } else if (out.getFunctionSpace().getTypeCode() == Elements ||
252                    out.getFunctionSpace().getTypeCode() == ReducedElements) {
253            myN0 = m_NE0;
254            myN1 = m_NE1;
255            myN2 = m_NE2;
256        } else
257            throw RipleyException("readBinaryGrid(): invalid function space for output data object");
258    
259        // check file existence and size
260        ifstream f(filename.c_str(), ifstream::binary);
261        if (f.fail()) {
262            throw RipleyException("readBinaryGrid(): cannot open file");
263        }
264        f.seekg(0, ios::end);
265        const int numComp = out.getDataPointSize();
266        const int filesize = f.tellg();
267        const int reqsize = numValues[0]*numValues[1]*numValues[2]*numComp*sizeof(float);
268        if (filesize < reqsize) {
269            f.close();
270            throw RipleyException("readBinaryGrid(): not enough data in file");
271        }
272    
273        // check if this rank contributes anything
274        if (first[0] >= m_offset0+myN0 || first[0]+numValues[0] <= m_offset0 ||
275                first[1] >= m_offset1+myN1 || first[1]+numValues[1] <= m_offset1 ||
276                first[2] >= m_offset2+myN2 || first[2]+numValues[2] <= m_offset2) {
277            f.close();
278            return;
279        }
280    
281        // now determine how much this rank has to write
282    
283        // first coordinates in data object to write to
284        const int first0 = max(0, first[0]-m_offset0);
285        const int first1 = max(0, first[1]-m_offset1);
286        const int first2 = max(0, first[2]-m_offset2);
287        // indices to first value in file
288        const int idx0 = max(0, m_offset0-first[0]);
289        const int idx1 = max(0, m_offset1-first[1]);
290        const int idx2 = max(0, m_offset2-first[2]);
291        // number of values to write
292        const int num0 = min(numValues[0]-idx0, myN0-first0);
293        const int num1 = min(numValues[1]-idx1, myN1-first1);
294        const int num2 = min(numValues[2]-idx2, myN2-first2);
295    
296        out.requireWrite();
297        vector<float> values(num0*numComp);
298        const int dpp = out.getNumDataPointsPerSample();
299    
300        for (index_t z=0; z<num2; z++) {
301            for (index_t y=0; y<num1; y++) {
302                const int fileofs = numComp*(idx0+(idx1+y)*numValues[0]+(idx2+z)*numValues[0]*numValues[1]);
303                f.seekg(fileofs*sizeof(float));
304                f.read((char*)&values[0], num0*numComp*sizeof(float));
305                for (index_t x=0; x<num0; x++) {
306                    double* dest = out.getSampleDataRW(first0+x+(first1+y)*myN0+(first2+z)*myN0*myN1);
307                    for (index_t c=0; c<numComp; c++) {
308                        for (index_t q=0; q<dpp; q++) {
309                            *dest++ = static_cast<double>(values[x*numComp+c]);
310                        }
311                    }
312                }
313            }
314        }
315    
316        f.close();
317    }
318    
319  void Brick::dump(const string& fileName) const  void Brick::dump(const string& fileName) const
320  {  {
321  #if USE_SILO  #if USE_SILO
# Line 123  void Brick::dump(const string& fileName) Line 324  void Brick::dump(const string& fileName)
324          fn+=".silo";          fn+=".silo";
325      }      }
326    
     const int NUM_SILO_FILES = 1;  
     const char* blockDirFmt = "/block%04d";  
327      int driver=DB_HDF5;          int driver=DB_HDF5;    
328      string siloPath;      string siloPath;
329      DBfile* dbfile = NULL;      DBfile* dbfile = NULL;
330    
331  #ifdef ESYS_MPI  #ifdef ESYS_MPI
332      PMPIO_baton_t* baton = NULL;      PMPIO_baton_t* baton = NULL;
333        const int NUM_SILO_FILES = 1;
334        const char* blockDirFmt = "/block%04d";
335  #endif  #endif
336    
337      if (m_mpiInfo->size > 1) {      if (m_mpiInfo->size > 1) {
# Line 256  void Brick::dump(const string& fileName) Line 457  void Brick::dump(const string& fileName)
457      }      }
458    
459  #else // USE_SILO  #else // USE_SILO
460      throw RipleyException("dump(): no Silo support");      throw RipleyException("dump: no Silo support");
461  #endif  #endif
462  }  }
463    
# Line 280  const int* Brick::borrowSampleReferenceI Line 481  const int* Brick::borrowSampleReferenceI
481      }      }
482    
483      stringstream msg;      stringstream msg;
484      msg << "borrowSampleReferenceIDs() not implemented for function space type "      msg << "borrowSampleReferenceIDs: invalid function space type "<<fsType;
         << fsType;  
485      throw RipleyException(msg.str());      throw RipleyException(msg.str());
486  }  }
487    
# Line 335  bool Brick::ownSample(int fsType, index_ Line 535  bool Brick::ownSample(int fsType, index_
535      }      }
536    
537      stringstream msg;      stringstream msg;
538      msg << "ownSample() not implemented for "      msg << "ownSample: invalid function space type " << fsType;
         << functionSpaceTypeAsString(fsType);  
539      throw RipleyException(msg.str());      throw RipleyException(msg.str());
540  }  }
541    
# Line 509  void Brick::setToNormal(escript::Data& o Line 708  void Brick::setToNormal(escript::Data& o
708    
709      } else {      } else {
710          stringstream msg;          stringstream msg;
711          msg << "setToNormal() not implemented for "          msg << "setToNormal: invalid function space type "
712              << functionSpaceTypeAsString(out.getFunctionSpace().getTypeCode());              << out.getFunctionSpace().getTypeCode();
713          throw RipleyException(msg.str());          throw RipleyException(msg.str());
714      }      }
715  }  }
# Line 524  void Brick::setToSize(escript::Data& out Line 723  void Brick::setToSize(escript::Data& out
723          const double xSize=getFirstCoordAndSpacing(0).second;          const double xSize=getFirstCoordAndSpacing(0).second;
724          const double ySize=getFirstCoordAndSpacing(1).second;          const double ySize=getFirstCoordAndSpacing(1).second;
725          const double zSize=getFirstCoordAndSpacing(2).second;          const double zSize=getFirstCoordAndSpacing(2).second;
726          const double size=min(min(xSize,ySize),zSize);          const double size=sqrt(xSize*xSize+ySize*ySize+zSize*zSize);
727  #pragma omp parallel for  #pragma omp parallel for
728          for (index_t k = 0; k < getNumElements(); ++k) {          for (index_t k = 0; k < getNumElements(); ++k) {
729              double* o = out.getSampleDataRW(k);              double* o = out.getSampleDataRW(k);
# Line 608  void Brick::setToSize(escript::Data& out Line 807  void Brick::setToSize(escript::Data& out
807    
808      } else {      } else {
809          stringstream msg;          stringstream msg;
810          msg << "setToSize() not implemented for "          msg << "setToSize: invalid function space type "
811              << functionSpaceTypeAsString(out.getFunctionSpace().getTypeCode());              << out.getFunctionSpace().getTypeCode();
812          throw RipleyException(msg.str());          throw RipleyException(msg.str());
813      }      }
814  }  }
# Line 697  IndexVector Brick::getNumSubdivisionsPer Line 896  IndexVector Brick::getNumSubdivisionsPer
896  pair<double,double> Brick::getFirstCoordAndSpacing(dim_t dim) const  pair<double,double> Brick::getFirstCoordAndSpacing(dim_t dim) const
897  {  {
898      if (dim==0)      if (dim==0)
899          return pair<double,double>((m_l0*m_offset0)/m_gNE0, m_l0/m_gNE0);          return pair<double,double>(m_x0+(m_l0*m_offset0)/m_gNE0, m_l0/m_gNE0);
900      else if (dim==1)      else if (dim==1)
901          return pair<double,double>((m_l1*m_offset1)/m_gNE1, m_l1/m_gNE1);          return pair<double,double>(m_y0+(m_l1*m_offset1)/m_gNE1, m_l1/m_gNE1);
902      else if (dim==2)      else if (dim==2)
903          return pair<double,double>((m_l2*m_offset2)/m_gNE2, m_l2/m_gNE2);          return pair<double,double>(m_z0+(m_l2*m_offset2)/m_gNE2, m_l2/m_gNE2);
904    
905      throw RipleyException("getFirstCoordAndSpacing(): invalid argument");      throw RipleyException("getFirstCoordAndSpacing: invalid argument");
906  }  }
907    
908  //protected  //protected
# Line 755  void Brick::assembleGradient(escript::Da Line 954  void Brick::assembleGradient(escript::Da
954      const dim_t numComp = in.getDataPointSize();      const dim_t numComp = in.getDataPointSize();
955      const double h0 = m_l0/m_gNE0;      const double h0 = m_l0/m_gNE0;
956      const double h1 = m_l1/m_gNE1;      const double h1 = m_l1/m_gNE1;
957      const double h2 = m_l1/m_gNE2;      const double h2 = m_l2/m_gNE2;
958      const double C0 = .044658198738520451079;      const double C0 = .044658198738520451079;
959      const double C1 = .16666666666666666667;      const double C1 = .16666666666666666667;
960      const double C2 = .21132486540518711775;      const double C2 = .21132486540518711775;
# Line 766  void Brick::assembleGradient(escript::Da Line 965  void Brick::assembleGradient(escript::Da
965    
966      if (out.getFunctionSpace().getTypeCode() == Elements) {      if (out.getFunctionSpace().getTypeCode() == Elements) {
967          out.requireWrite();          out.requireWrite();
968  #pragma omp parallel for  #pragma omp parallel
969          for (index_t k2=0; k2 < m_NE2; ++k2) {          {
970              for (index_t k1=0; k1 < m_NE1; ++k1) {              vector<double> f_000(numComp);
971                  for (index_t k0=0; k0 < m_NE0; ++k0) {              vector<double> f_001(numComp);
972                      const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1));              vector<double> f_010(numComp);
973                      const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1));              vector<double> f_011(numComp);
974                      const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1));              vector<double> f_100(numComp);
975                      const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1));              vector<double> f_101(numComp);
976                      const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1));              vector<double> f_110(numComp);
977                      const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1));              vector<double> f_111(numComp);
978                      const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1));  #pragma omp for
979                      const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1));              for (index_t k2=0; k2 < m_NE2; ++k2) {
980                      double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));                  for (index_t k1=0; k1 < m_NE1; ++k1) {
981                      for (index_t i=0; i < numComp; ++i) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
982                          const double V0=((f_100[i]-f_000[i])*C5 + (f_111[i]-f_011[i])*C0 + (f_101[i]+f_110[i]-f_001[i]-f_010[i])*C1) / h0;                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
983                          const double V1=((f_110[i]-f_010[i])*C5 + (f_101[i]-f_001[i])*C0 + (f_100[i]+f_111[i]-f_000[i]-f_011[i])*C1) / h0;                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
984                          const double V2=((f_101[i]-f_001[i])*C5 + (f_110[i]-f_010[i])*C0 + (f_100[i]+f_111[i]-f_000[i]-f_011[i])*C1) / h0;                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
985                          const double V3=((f_111[i]-f_011[i])*C5 + (f_100[i]-f_000[i])*C0 + (f_101[i]+f_110[i]-f_001[i]-f_010[i])*C1) / h0;                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
986                          const double V4=((f_010[i]-f_000[i])*C5 + (f_111[i]-f_101[i])*C0 + (f_011[i]+f_110[i]-f_001[i]-f_100[i])*C1) / h1;                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
987                          const double V5=((f_110[i]-f_100[i])*C5 + (f_011[i]-f_001[i])*C0 + (f_010[i]+f_111[i]-f_000[i]-f_101[i])*C1) / h1;                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
988                          const double V6=((f_011[i]-f_001[i])*C5 + (f_110[i]-f_100[i])*C0 + (f_010[i]+f_111[i]-f_000[i]-f_101[i])*C1) / h1;                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
989                          const double V7=((f_111[i]-f_101[i])*C5 + (f_010[i]-f_000[i])*C0 + (f_011[i]+f_110[i]-f_001[i]-f_100[i])*C1) / h1;                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
990                          const double V8=((f_001[i]-f_000[i])*C5 + (f_111[i]-f_110[i])*C0 + (f_011[i]+f_101[i]-f_010[i]-f_100[i])*C1) / h2;                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));
991                          const double V9=((f_101[i]-f_100[i])*C5 + (f_011[i]-f_010[i])*C0 + (f_001[i]+f_111[i]-f_000[i]-f_110[i])*C1) / h2;                          for (index_t i=0; i < numComp; ++i) {
992                          const double V10=((f_011[i]-f_010[i])*C5 + (f_101[i]-f_100[i])*C0 + (f_001[i]+f_111[i]-f_000[i]-f_110[i])*C1) / h2;                              const double V0=((f_100[i]-f_000[i])*C5 + (f_111[i]-f_011[i])*C0 + (f_101[i]+f_110[i]-f_001[i]-f_010[i])*C1) / h0;
993                          const double V11=((f_111[i]-f_110[i])*C5 + (f_001[i]-f_000[i])*C0 + (f_011[i]+f_101[i]-f_010[i]-f_100[i])*C1) / h2;                              const double V1=((f_110[i]-f_010[i])*C5 + (f_101[i]-f_001[i])*C0 + (f_100[i]+f_111[i]-f_000[i]-f_011[i])*C1) / h0;
994                          o[INDEX3(i,0,0,numComp,3)] = V0;                              const double V2=((f_101[i]-f_001[i])*C5 + (f_110[i]-f_010[i])*C0 + (f_100[i]+f_111[i]-f_000[i]-f_011[i])*C1) / h0;
995                          o[INDEX3(i,1,0,numComp,3)] = V4;                              const double V3=((f_111[i]-f_011[i])*C5 + (f_100[i]-f_000[i])*C0 + (f_101[i]+f_110[i]-f_001[i]-f_010[i])*C1) / h0;
996                          o[INDEX3(i,2,0,numComp,3)] = V8;                              const double V4=((f_010[i]-f_000[i])*C5 + (f_111[i]-f_101[i])*C0 + (f_011[i]+f_110[i]-f_001[i]-f_100[i])*C1) / h1;
997                          o[INDEX3(i,0,1,numComp,3)] = V0;                              const double V5=((f_110[i]-f_100[i])*C5 + (f_011[i]-f_001[i])*C0 + (f_010[i]+f_111[i]-f_000[i]-f_101[i])*C1) / h1;
998                          o[INDEX3(i,1,1,numComp,3)] = V5;                              const double V6=((f_011[i]-f_001[i])*C5 + (f_110[i]-f_100[i])*C0 + (f_010[i]+f_111[i]-f_000[i]-f_101[i])*C1) / h1;
999                          o[INDEX3(i,2,1,numComp,3)] = V9;                              const double V7=((f_111[i]-f_101[i])*C5 + (f_010[i]-f_000[i])*C0 + (f_011[i]+f_110[i]-f_001[i]-f_100[i])*C1) / h1;
1000                          o[INDEX3(i,0,2,numComp,3)] = V1;                              const double V8=((f_001[i]-f_000[i])*C5 + (f_111[i]-f_110[i])*C0 + (f_011[i]+f_101[i]-f_010[i]-f_100[i])*C1) / h2;
1001                          o[INDEX3(i,1,2,numComp,3)] = V4;                              const double V9=((f_101[i]-f_100[i])*C5 + (f_011[i]-f_010[i])*C0 + (f_001[i]+f_111[i]-f_000[i]-f_110[i])*C1) / h2;
1002                          o[INDEX3(i,2,2,numComp,3)] = V10;                              const double V10=((f_011[i]-f_010[i])*C5 + (f_101[i]-f_100[i])*C0 + (f_001[i]+f_111[i]-f_000[i]-f_110[i])*C1) / h2;
1003                          o[INDEX3(i,0,3,numComp,3)] = V1;                              const double V11=((f_111[i]-f_110[i])*C5 + (f_001[i]-f_000[i])*C0 + (f_011[i]+f_101[i]-f_010[i]-f_100[i])*C1) / h2;
1004                          o[INDEX3(i,1,3,numComp,3)] = V5;                              o[INDEX3(i,0,0,numComp,3)] = V0;
1005                          o[INDEX3(i,2,3,numComp,3)] = V11;                              o[INDEX3(i,1,0,numComp,3)] = V4;
1006                          o[INDEX3(i,0,4,numComp,3)] = V2;                              o[INDEX3(i,2,0,numComp,3)] = V8;
1007                          o[INDEX3(i,1,4,numComp,3)] = V6;                              o[INDEX3(i,0,1,numComp,3)] = V0;
1008                          o[INDEX3(i,2,4,numComp,3)] = V8;                              o[INDEX3(i,1,1,numComp,3)] = V5;
1009                          o[INDEX3(i,0,5,numComp,3)] = V2;                              o[INDEX3(i,2,1,numComp,3)] = V9;
1010                          o[INDEX3(i,1,5,numComp,3)] = V7;                              o[INDEX3(i,0,2,numComp,3)] = V1;
1011                          o[INDEX3(i,2,5,numComp,3)] = V9;                              o[INDEX3(i,1,2,numComp,3)] = V4;
1012                          o[INDEX3(i,0,6,numComp,3)] = V3;                              o[INDEX3(i,2,2,numComp,3)] = V10;
1013                          o[INDEX3(i,1,6,numComp,3)] = V6;                              o[INDEX3(i,0,3,numComp,3)] = V1;
1014                          o[INDEX3(i,2,6,numComp,3)] = V10;                              o[INDEX3(i,1,3,numComp,3)] = V5;
1015                          o[INDEX3(i,0,7,numComp,3)] = V3;                              o[INDEX3(i,2,3,numComp,3)] = V11;
1016                          o[INDEX3(i,1,7,numComp,3)] = V7;                              o[INDEX3(i,0,4,numComp,3)] = V2;
1017                          o[INDEX3(i,2,7,numComp,3)] = V11;                              o[INDEX3(i,1,4,numComp,3)] = V6;
1018                      } // end of component loop i                              o[INDEX3(i,2,4,numComp,3)] = V8;
1019                  } // end of k0 loop                              o[INDEX3(i,0,5,numComp,3)] = V2;
1020              } // end of k1 loop                              o[INDEX3(i,1,5,numComp,3)] = V7;
1021          } // end of k2 loop                              o[INDEX3(i,2,5,numComp,3)] = V9;
1022                                o[INDEX3(i,0,6,numComp,3)] = V3;
1023                                o[INDEX3(i,1,6,numComp,3)] = V6;
1024                                o[INDEX3(i,2,6,numComp,3)] = V10;
1025                                o[INDEX3(i,0,7,numComp,3)] = V3;
1026                                o[INDEX3(i,1,7,numComp,3)] = V7;
1027                                o[INDEX3(i,2,7,numComp,3)] = V11;
1028                            } // end of component loop i
1029                        } // end of k0 loop
1030                    } // end of k1 loop
1031                } // end of k2 loop
1032            } // end of parallel section
1033      } else if (out.getFunctionSpace().getTypeCode() == ReducedElements) {      } else if (out.getFunctionSpace().getTypeCode() == ReducedElements) {
1034          out.requireWrite();          out.requireWrite();
1035  #pragma omp parallel for  #pragma omp parallel
1036          for (index_t k2=0; k2 < m_NE2; ++k2) {          {
1037              for (index_t k1=0; k1 < m_NE1; ++k1) {              vector<double> f_000(numComp);
1038                  for (index_t k0=0; k0 < m_NE0; ++k0) {              vector<double> f_001(numComp);
1039                      const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1));              vector<double> f_010(numComp);
1040                      const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1));              vector<double> f_011(numComp);
1041                      const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1));              vector<double> f_100(numComp);
1042                      const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1));              vector<double> f_101(numComp);
1043                      const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1));              vector<double> f_110(numComp);
1044                      const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1));              vector<double> f_111(numComp);
1045                      const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1));  #pragma omp for
1046                      const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1));              for (index_t k2=0; k2 < m_NE2; ++k2) {
1047                      double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));                  for (index_t k1=0; k1 < m_NE1; ++k1) {
1048                      for (index_t i=0; i < numComp; ++i) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1049                          o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_010[i]-f_011[i])*C3 / h0;                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1050                          o[INDEX3(i,1,0,numComp,3)] = (f_010[i]+f_011[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_100[i]-f_101[i])*C3 / h1;                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1051                          o[INDEX3(i,2,0,numComp,3)] = (f_001[i]+f_011[i]+f_101[i]+f_111[i]-f_000[i]-f_010[i]-f_100[i]-f_110[i])*C3 / h2;                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1052                      } // end of component loop i                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1053                  } // end of k0 loop                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1054              } // end of k1 loop                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1055          } // end of k2 loop                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1056                            memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1057                            double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));
1058                            for (index_t i=0; i < numComp; ++i) {
1059                                o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_010[i]-f_011[i])*C3 / h0;
1060                                o[INDEX3(i,1,0,numComp,3)] = (f_010[i]+f_011[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_100[i]-f_101[i])*C3 / h1;
1061                                o[INDEX3(i,2,0,numComp,3)] = (f_001[i]+f_011[i]+f_101[i]+f_111[i]-f_000[i]-f_010[i]-f_100[i]-f_110[i])*C3 / h2;
1062                            } // end of component loop i
1063                        } // end of k0 loop
1064                    } // end of k1 loop
1065                } // end of k2 loop
1066            } // end of parallel section
1067      } else if (out.getFunctionSpace().getTypeCode() == FaceElements) {      } else if (out.getFunctionSpace().getTypeCode() == FaceElements) {
1068          out.requireWrite();          out.requireWrite();
1069  #pragma omp parallel  #pragma omp parallel
1070          {          {
1071                vector<double> f_000(numComp);
1072                vector<double> f_001(numComp);
1073                vector<double> f_010(numComp);
1074                vector<double> f_011(numComp);
1075                vector<double> f_100(numComp);
1076                vector<double> f_101(numComp);
1077                vector<double> f_110(numComp);
1078                vector<double> f_111(numComp);
1079              if (m_faceOffset[0] > -1) {              if (m_faceOffset[0] > -1) {
1080  #pragma omp for nowait  #pragma omp for nowait
1081                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1082                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
1083                          const double* f_000 = in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1084                          const double* f_001 = in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1085                          const double* f_101 = in.getSampleDataRO(INDEX3(1,k1,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1086                          const double* f_111 = in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1087                          const double* f_110 = in.getSampleDataRO(INDEX3(1,k1+1,k2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1088                          const double* f_011 = in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1089                          const double* f_010 = in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1090                          const double* f_100 = in.getSampleDataRO(INDEX3(1,k1,k2, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1091                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));
1092                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1093                              const double V0=((f_010[i]-f_000[i])*C6 + (f_011[i]-f_001[i])*C2) / h1;                              const double V0=((f_010[i]-f_000[i])*C6 + (f_011[i]-f_001[i])*C2) / h1;
# Line 885  void Brick::assembleGradient(escript::Da Line 1114  void Brick::assembleGradient(escript::Da
1114  #pragma omp for nowait  #pragma omp for nowait
1115                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1116                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
1117                          const double* f_000 = in.getSampleDataRO(INDEX3(m_N0-2,k1,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(m_N0-2,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1118                          const double* f_001 = in.getSampleDataRO(INDEX3(m_N0-2,k1,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(m_N0-2,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1119                          const double* f_101 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1120                          const double* f_111 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1121                          const double* f_110 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1122                          const double* f_011 = in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1123                          const double* f_010 = in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1124                          const double* f_100 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1125                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));
1126                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1127                              const double V0=((f_110[i]-f_100[i])*C6 + (f_111[i]-f_101[i])*C2) / h1;                              const double V0=((f_110[i]-f_100[i])*C6 + (f_111[i]-f_101[i])*C2) / h1;
# Line 919  void Brick::assembleGradient(escript::Da Line 1148  void Brick::assembleGradient(escript::Da
1148  #pragma omp for nowait  #pragma omp for nowait
1149                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1150                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1151                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1)), numComp*sizeof(double));
1152                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1153                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,1,k2, m_N0,m_N1)), numComp*sizeof(double));
1154                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1155                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1)), numComp*sizeof(double));
1156                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,1,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1157                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,1,k2+1, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,1,k2, m_N0,m_N1)), numComp*sizeof(double));
1158                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,1,k2, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1159                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));
1160                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1161                              const double V0=((f_100[i]-f_000[i])*C6 + (f_101[i]-f_001[i])*C2) / h0;                              const double V0=((f_100[i]-f_000[i])*C6 + (f_101[i]-f_001[i])*C2) / h0;
# Line 952  void Brick::assembleGradient(escript::Da Line 1181  void Brick::assembleGradient(escript::Da
1181  #pragma omp for nowait  #pragma omp for nowait
1182                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1183                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1184                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,m_N1-2,k2, m_N0,m_N1)), numComp*sizeof(double));
1185                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,m_N1-2,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1186                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
1187                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1188                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,m_N1-2,k2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2, m_N0,m_N1)), numComp*sizeof(double));
1189                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,m_N1-2,k2+1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1190                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2+1, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
1191                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1192                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));
1193                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1194                              const double V0=((f_110[i]-f_010[i])*C6 + (f_111[i]-f_011[i])*C2) / h0;                              const double V0=((f_110[i]-f_010[i])*C6 + (f_111[i]-f_011[i])*C2) / h0;
# Line 986  void Brick::assembleGradient(escript::Da Line 1215  void Brick::assembleGradient(escript::Da
1215  #pragma omp for nowait  #pragma omp for nowait
1216                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
1217                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1218                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1)), numComp*sizeof(double));
1219                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,1, m_N0,m_N1)), numComp*sizeof(double));
1220                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
1221                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,1, m_N0,m_N1)), numComp*sizeof(double));
1222                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,1, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1)), numComp*sizeof(double));
1223                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,1, m_N0,m_N1)), numComp*sizeof(double));
1224                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,1, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
1225                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_N0,m_N1)), numComp*sizeof(double));
1226                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));
1227                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1228                              const double V0=((f_100[i]-f_000[i])*C6 + (f_110[i]-f_010[i])*C2) / h0;                              const double V0=((f_100[i]-f_000[i])*C6 + (f_110[i]-f_010[i])*C2) / h0;
# Line 1020  void Brick::assembleGradient(escript::Da Line 1249  void Brick::assembleGradient(escript::Da
1249  #pragma omp for nowait  #pragma omp for nowait
1250                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
1251                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1252                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1253                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1254                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1255                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1256                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,m_N2-2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1257                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1258                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1259                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-2, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1260                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));
1261                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1262                              const double V0=((f_101[i]-f_001[i])*C6 + (f_111[i]-f_011[i])*C2) / h0;                              const double V0=((f_101[i]-f_001[i])*C6 + (f_111[i]-f_011[i])*C2) / h0;
# Line 1055  void Brick::assembleGradient(escript::Da Line 1284  void Brick::assembleGradient(escript::Da
1284          out.requireWrite();          out.requireWrite();
1285  #pragma omp parallel  #pragma omp parallel
1286          {          {
1287                vector<double> f_000(numComp);
1288                vector<double> f_001(numComp);
1289                vector<double> f_010(numComp);
1290                vector<double> f_011(numComp);
1291                vector<double> f_100(numComp);
1292                vector<double> f_101(numComp);
1293                vector<double> f_110(numComp);
1294                vector<double> f_111(numComp);
1295              if (m_faceOffset[0] > -1) {              if (m_faceOffset[0] > -1) {
1296  #pragma omp for nowait  #pragma omp for nowait
1297                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1298                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
1299                          const double* f_000 = in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1300                          const double* f_001 = in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1301                          const double* f_101 = in.getSampleDataRO(INDEX3(1,k1,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1302                          const double* f_011 = in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1303                          const double* f_100 = in.getSampleDataRO(INDEX3(1,k1,k2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1304                          const double* f_110 = in.getSampleDataRO(INDEX3(1,k1+1,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1305                          const double* f_010 = in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1306                          const double* f_111 = in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1307                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));
1308                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1309                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_010[i]-f_011[i])*C3 / h0;                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_010[i]-f_011[i])*C3 / h0;
# Line 1080  void Brick::assembleGradient(escript::Da Line 1317  void Brick::assembleGradient(escript::Da
1317  #pragma omp for nowait  #pragma omp for nowait
1318                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1319                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
1320                          const double* f_000 = in.getSampleDataRO(INDEX3(m_N0-2,k1,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(m_N0-2,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1321                          const double* f_001 = in.getSampleDataRO(INDEX3(m_N0-2,k1,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(m_N0-2,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1322                          const double* f_101 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1323                          const double* f_011 = in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1324                          const double* f_100 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
1325                          const double* f_110 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1326                          const double* f_010 = in.getSampleDataRO(INDEX3(m_N0-2,k1+1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
1327                          const double* f_111 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1328                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));
1329                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1330                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_010[i]-f_011[i])*C3 / h0;                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]+f_110[i]+f_111[i]-f_000[i]-f_001[i]-f_010[i]-f_011[i])*C3 / h0;
# Line 1101  void Brick::assembleGradient(escript::Da Line 1338  void Brick::assembleGradient(escript::Da
1338  #pragma omp for nowait  #pragma omp for nowait
1339                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1340                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1341                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1)), numComp*sizeof(double));
1342                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1343                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,1,k2, m_N0,m_N1)), numComp*sizeof(double));
1344                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1345                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,1,k2+1, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1)), numComp*sizeof(double));
1346                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,1,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1347                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,1,k2, m_N0,m_N1)), numComp*sizeof(double));
1348                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1349                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));
1350                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1351                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]-f_000[i]-f_001[i])*C4 / h0;                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_101[i]-f_000[i]-f_001[i])*C4 / h0;
# Line 1122  void Brick::assembleGradient(escript::Da Line 1359  void Brick::assembleGradient(escript::Da
1359  #pragma omp for nowait  #pragma omp for nowait
1360                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
1361                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1362                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,m_N1-2,k2, m_N0,m_N1)), numComp*sizeof(double));
1363                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,m_N1-2,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1364                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
1365                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1366                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,m_N1-2,k2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2, m_N0,m_N1)), numComp*sizeof(double));
1367                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2+1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1368                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,m_N1-2,k2+1, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
1369                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,m_N1-2,k2, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
1370                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));
1371                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1372                              o[INDEX3(i,0,0,numComp,3)] = (f_110[i]+f_111[i]-f_010[i]-f_011[i])*C4 / h0;                              o[INDEX3(i,0,0,numComp,3)] = (f_110[i]+f_111[i]-f_010[i]-f_011[i])*C4 / h0;
# Line 1143  void Brick::assembleGradient(escript::Da Line 1380  void Brick::assembleGradient(escript::Da
1380  #pragma omp for nowait  #pragma omp for nowait
1381                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
1382                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1383                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1)), numComp*sizeof(double));
1384                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,1, m_N0,m_N1)), numComp*sizeof(double));
1385                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
1386                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,1, m_N0,m_N1)), numComp*sizeof(double));
1387                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,1, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1)), numComp*sizeof(double));
1388                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,1, m_N0,m_N1)), numComp*sizeof(double));
1389                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,1, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
1390                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_N0,m_N1)), numComp*sizeof(double));
1391                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));
1392                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1393                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_110[i]-f_000[i]-f_010[i])*C4 / h0;                              o[INDEX3(i,0,0,numComp,3)] = (f_100[i]+f_110[i]-f_000[i]-f_010[i])*C4 / h0;
# Line 1164  void Brick::assembleGradient(escript::Da Line 1401  void Brick::assembleGradient(escript::Da
1401  #pragma omp for nowait  #pragma omp for nowait
1402                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
1403                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
1404                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1405                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1406                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1407                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1408                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,m_N2-2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1409                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1410                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-2, m_N0,m_N1)), numComp*sizeof(double));
1411                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-2, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
1412                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));
1413                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1414                              o[INDEX3(i,0,0,numComp,3)] = (f_101[i]+f_111[i]-f_001[i]-f_011[i])*C4 / h0;                              o[INDEX3(i,0,0,numComp,3)] = (f_101[i]+f_111[i]-f_001[i]-f_011[i])*C4 / h0;
# Line 1195  void Brick::assembleIntegrate(vector<dou Line 1432  void Brick::assembleIntegrate(vector<dou
1432      const index_t left = (m_offset0==0 ? 0 : 1);      const index_t left = (m_offset0==0 ? 0 : 1);
1433      const index_t bottom = (m_offset1==0 ? 0 : 1);      const index_t bottom = (m_offset1==0 ? 0 : 1);
1434      const index_t front = (m_offset2==0 ? 0 : 1);      const index_t front = (m_offset2==0 ? 0 : 1);
1435      if (arg.getFunctionSpace().getTypeCode() == Elements) {      const int fs = arg.getFunctionSpace().getTypeCode();
1436        if (fs == Elements && arg.actsExpanded()) {
1437          const double w_0 = h0*h1*h2/8.;          const double w_0 = h0*h1*h2/8.;
1438  #pragma omp parallel  #pragma omp parallel
1439          {          {
# Line 1224  void Brick::assembleIntegrate(vector<dou Line 1462  void Brick::assembleIntegrate(vector<dou
1462              for (index_t i=0; i<numComp; i++)              for (index_t i=0; i<numComp; i++)
1463                  integrals[i]+=int_local[i];                  integrals[i]+=int_local[i];
1464          } // end of parallel section          } // end of parallel section
1465      } else if (arg.getFunctionSpace().getTypeCode() == ReducedElements) {  
1466        } else if (fs==ReducedElements || (fs==Elements && !arg.actsExpanded())) {
1467          const double w_0 = h0*h1*h2;          const double w_0 = h0*h1*h2;
1468  #pragma omp parallel  #pragma omp parallel
1469          {          {
# Line 1245  void Brick::assembleIntegrate(vector<dou Line 1484  void Brick::assembleIntegrate(vector<dou
1484              for (index_t i=0; i<numComp; i++)              for (index_t i=0; i<numComp; i++)
1485                  integrals[i]+=int_local[i];                  integrals[i]+=int_local[i];
1486          } // end of parallel section          } // end of parallel section
1487      } else if (arg.getFunctionSpace().getTypeCode() == FaceElements) {  
1488        } else if (fs == FaceElements && arg.actsExpanded()) {
1489          const double w_0 = h1*h2/4.;          const double w_0 = h1*h2/4.;
1490          const double w_1 = h0*h2/4.;          const double w_1 = h0*h2/4.;
1491          const double w_2 = h0*h1/4.;          const double w_2 = h0*h1/4.;
# Line 1353  void Brick::assembleIntegrate(vector<dou Line 1593  void Brick::assembleIntegrate(vector<dou
1593                  integrals[i]+=int_local[i];                  integrals[i]+=int_local[i];
1594          } // end of parallel section          } // end of parallel section
1595    
1596      } else if (arg.getFunctionSpace().getTypeCode() == ReducedFaceElements) {      } else if (fs==ReducedFaceElements || (fs==FaceElements && !arg.actsExpanded())) {
1597          const double w_0 = h1*h2;          const double w_0 = h1*h2;
1598          const double w_1 = h0*h2;          const double w_1 = h0*h2;
1599          const double w_2 = h0*h1;          const double w_2 = h0*h1;
# Line 1436  void Brick::assembleIntegrate(vector<dou Line 1676  void Brick::assembleIntegrate(vector<dou
1676              for (index_t i=0; i<numComp; i++)              for (index_t i=0; i<numComp; i++)
1677                  integrals[i]+=int_local[i];                  integrals[i]+=int_local[i];
1678          } // end of parallel section          } // end of parallel section
1679        } // function space selector
     }  
1680  }  }
1681    
1682  //protected  //protected
# Line 1526  void Brick::populateSampleIds() Line 1765  void Brick::populateSampleIds()
1765      // globally      // globally
1766    
1767      // build node distribution vector first.      // build node distribution vector first.
1768      // rank i owns m_nodeDistribution[i+1]-nodeDistribution[i] nodes      // rank i owns m_nodeDistribution[i+1]-nodeDistribution[i] nodes which is
1769        // constant for all ranks in this implementation
1770      m_nodeDistribution.assign(m_mpiInfo->size+1, 0);      m_nodeDistribution.assign(m_mpiInfo->size+1, 0);
1771      const dim_t numDOF=getNumDOF();      const dim_t numDOF=getNumDOF();
1772      for (dim_t k=1; k<m_mpiInfo->size; k++) {      for (dim_t k=1; k<m_mpiInfo->size; k++) {
# Line 1758  void Brick::createPattern() Line 1998  void Brick::createPattern()
1998                          offsetInShared.push_back(offsetInShared.back()+nDOF0);                          offsetInShared.push_back(offsetInShared.back()+nDOF0);
1999                          const int firstDOF=(i1+1)/2*nDOF0*(nDOF1-1)                          const int firstDOF=(i1+1)/2*nDOF0*(nDOF1-1)
2000                                             +(i2+1)/2*nDOF0*nDOF1*(nDOF2-1);                                             +(i2+1)/2*nDOF0*nDOF1*(nDOF2-1);
2001                          const int firstNode=(i1+1)/2*m_N0*(m_N1-1)                          const int firstNode=left+(i1+1)/2*m_N0*(m_N1-1)
2002                                              +(i2+1)/2*m_N0*m_N1*(m_N2-1);                                              +(i2+1)/2*m_N0*m_N1*(m_N2-1);
2003                          for (dim_t i=0; i<nDOF0; i++, numShared++) {                          for (dim_t i=0; i<nDOF0; i++, numShared++) {
2004                              sendShared.push_back(firstDOF+i);                              sendShared.push_back(firstDOF+i);
# Line 1775  void Brick::createPattern() Line 2015  void Brick::createPattern()
2015                          offsetInShared.push_back(offsetInShared.back()+nDOF1);                          offsetInShared.push_back(offsetInShared.back()+nDOF1);
2016                          const int firstDOF=(i0+1)/2*(nDOF0-1)                          const int firstDOF=(i0+1)/2*(nDOF0-1)
2017                                             +(i2+1)/2*nDOF0*nDOF1*(nDOF2-1);                                             +(i2+1)/2*nDOF0*nDOF1*(nDOF2-1);
2018                          const int firstNode=(i0+1)/2*(m_N0-1)                          const int firstNode=bottom*m_N0
2019                                                +(i0+1)/2*(m_N0-1)
2020                                              +(i2+1)/2*m_N0*m_N1*(m_N2-1);                                              +(i2+1)/2*m_N0*m_N1*(m_N2-1);
2021                          for (dim_t i=0; i<nDOF1; i++, numShared++) {                          for (dim_t i=0; i<nDOF1; i++, numShared++) {
2022                              sendShared.push_back(firstDOF+i*nDOF0);                              sendShared.push_back(firstDOF+i*nDOF0);
# Line 1792  void Brick::createPattern() Line 2033  void Brick::createPattern()
2033                          offsetInShared.push_back(offsetInShared.back()+nDOF2);                          offsetInShared.push_back(offsetInShared.back()+nDOF2);
2034                          const int firstDOF=(i0+1)/2*(nDOF0-1)                          const int firstDOF=(i0+1)/2*(nDOF0-1)
2035                                             +(i1+1)/2*nDOF0*(nDOF1-1);                                             +(i1+1)/2*nDOF0*(nDOF1-1);
2036                          const int firstNode=(i0+1)/2*(m_N0-1)                          const int firstNode=front*m_N0*m_N1
2037                                                +(i0+1)/2*(m_N0-1)
2038                                              +(i1+1)/2*m_N0*(m_N1-1);                                              +(i1+1)/2*m_N0*(m_N1-1);
2039                          for (dim_t i=0; i<nDOF2; i++, numShared++) {                          for (dim_t i=0; i<nDOF2; i++, numShared++) {
2040                              sendShared.push_back(firstDOF+i*nDOF0*nDOF1);                              sendShared.push_back(firstDOF+i*nDOF0*nDOF1);
# Line 1951  void Brick::interpolateNodesOnElements(e Line 2193  void Brick::interpolateNodesOnElements(e
2193      if (reduced) {      if (reduced) {
2194          out.requireWrite();          out.requireWrite();
2195          const double c0 = .125;          const double c0 = .125;
2196  #pragma omp parallel for  #pragma omp parallel
2197          for (index_t k2=0; k2 < m_NE2; ++k2) {          {
2198              for (index_t k1=0; k1 < m_NE1; ++k1) {              vector<double> f_000(numComp);
2199                  for (index_t k0=0; k0 < m_NE0; ++k0) {              vector<double> f_001(numComp);
2200                      const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1));              vector<double> f_010(numComp);
2201                      const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1));              vector<double> f_011(numComp);
2202                      const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1));              vector<double> f_100(numComp);
2203                      const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1));              vector<double> f_101(numComp);
2204                      const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1));              vector<double> f_110(numComp);
2205                      const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1));              vector<double> f_111(numComp);
2206                      const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1));  #pragma omp for
2207                      const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1));              for (index_t k2=0; k2 < m_NE2; ++k2) {
2208                      double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));                  for (index_t k1=0; k1 < m_NE1; ++k1) {
2209                      for (index_t i=0; i < numComp; ++i) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2210                          o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_010[i] + f_011[i] + f_100[i] + f_101[i] + f_110[i] + f_111[i]);                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2211                      } // end of component loop i                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2212                  } // end of k0 loop                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2213              } // end of k1 loop                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2214          } // end of k2 loop                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2215                            memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2216                            memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2217                            memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2218                            double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));
2219                            for (index_t i=0; i < numComp; ++i) {
2220                                o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_010[i] + f_011[i] + f_100[i] + f_101[i] + f_110[i] + f_111[i]);
2221                            } // end of component loop i
2222                        } // end of k0 loop
2223                    } // end of k1 loop
2224                } // end of k2 loop
2225            } // end of parallel section
2226      } else {      } else {
2227          out.requireWrite();          out.requireWrite();
2228          const double c0 = .0094373878376559314545;          const double c0 = .0094373878376559314545;
2229          const double c1 = .035220810900864519624;          const double c1 = .035220810900864519624;
2230          const double c2 = .13144585576580214704;          const double c2 = .13144585576580214704;
2231          const double c3 = .49056261216234406855;          const double c3 = .49056261216234406855;
2232  #pragma omp parallel for  #pragma omp parallel
2233          for (index_t k2=0; k2 < m_NE2; ++k2) {          {
2234              for (index_t k1=0; k1 < m_NE1; ++k1) {              vector<double> f_000(numComp);
2235                  for (index_t k0=0; k0 < m_NE0; ++k0) {              vector<double> f_001(numComp);
2236                      const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1));              vector<double> f_010(numComp);
2237                      const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1));              vector<double> f_011(numComp);
2238                      const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1));              vector<double> f_100(numComp);
2239                      const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1));              vector<double> f_101(numComp);
2240                      const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1));              vector<double> f_110(numComp);
2241                      const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1));              vector<double> f_111(numComp);
2242                      const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1));  #pragma omp for
2243                      const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1));              for (index_t k2=0; k2 < m_NE2; ++k2) {
2244                      double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));                  for (index_t k1=0; k1 < m_NE1; ++k1) {
2245                      for (index_t i=0; i < numComp; ++i) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2246                          o[INDEX2(i,numComp,0)] = f_000[i]*c3 + f_111[i]*c0 + c2*(f_001[i] + f_010[i] + f_100[i]) + c1*(f_011[i] + f_101[i] + f_110[i]);                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2247                          o[INDEX2(i,numComp,1)] = f_011[i]*c0 + f_100[i]*c3 + c2*(f_000[i] + f_101[i] + f_110[i]) + c1*(f_001[i] + f_010[i] + f_111[i]);                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2248                          o[INDEX2(i,numComp,2)] = f_010[i]*c3 + f_101[i]*c0 + c2*(f_000[i] + f_011[i] + f_110[i]) + c1*(f_001[i] + f_100[i] + f_111[i]);                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2249                          o[INDEX2(i,numComp,3)] = f_001[i]*c0 + f_110[i]*c3 + c2*(f_010[i] + f_100[i] + f_111[i]) + c1*(f_000[i] + f_011[i] + f_101[i]);                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2250                          o[INDEX2(i,numComp,4)] = f_001[i]*c3 + f_110[i]*c0 + c2*(f_000[i] + f_011[i] + f_101[i]) + c1*(f_010[i] + f_100[i] + f_111[i]);                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2251                          o[INDEX2(i,numComp,5)] = f_010[i]*c0 + f_101[i]*c3 + c2*(f_001[i] + f_100[i] + f_111[i]) + c1*(f_000[i] + f_011[i] + f_110[i]);                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2252                          o[INDEX2(i,numComp,6)] = f_011[i]*c3 + f_100[i]*c0 + c2*(f_001[i] + f_010[i] + f_111[i]) + c1*(f_000[i] + f_101[i] + f_110[i]);                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2253                          o[INDEX2(i,numComp,7)] = f_000[i]*c0 + f_111[i]*c3 + c2*(f_011[i] + f_101[i] + f_110[i]) + c1*(f_001[i] + f_010[i] + f_100[i]);                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2254                      } // end of component loop i                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE0,m_NE1));
2255                  } // end of k0 loop                          for (index_t i=0; i < numComp; ++i) {
2256              } // end of k1 loop                              o[INDEX2(i,numComp,0)] = f_000[i]*c3 + f_111[i]*c0 + c2*(f_001[i] + f_010[i] + f_100[i]) + c1*(f_011[i] + f_101[i] + f_110[i]);
2257          } // end of k2 loop                              o[INDEX2(i,numComp,1)] = f_011[i]*c0 + f_100[i]*c3 + c2*(f_000[i] + f_101[i] + f_110[i]) + c1*(f_001[i] + f_010[i] + f_111[i]);
2258                                o[INDEX2(i,numComp,2)] = f_010[i]*c3 + f_101[i]*c0 + c2*(f_000[i] + f_011[i] + f_110[i]) + c1*(f_001[i] + f_100[i] + f_111[i]);
2259                                o[INDEX2(i,numComp,3)] = f_001[i]*c0 + f_110[i]*c3 + c2*(f_010[i] + f_100[i] + f_111[i]) + c1*(f_000[i] + f_011[i] + f_101[i]);
2260                                o[INDEX2(i,numComp,4)] = f_001[i]*c3 + f_110[i]*c0 + c2*(f_000[i] + f_011[i] + f_101[i]) + c1*(f_010[i] + f_100[i] + f_111[i]);
2261                                o[INDEX2(i,numComp,5)] = f_010[i]*c0 + f_101[i]*c3 + c2*(f_001[i] + f_100[i] + f_111[i]) + c1*(f_000[i] + f_011[i] + f_110[i]);
2262                                o[INDEX2(i,numComp,6)] = f_011[i]*c3 + f_100[i]*c0 + c2*(f_001[i] + f_010[i] + f_111[i]) + c1*(f_000[i] + f_101[i] + f_110[i]);
2263                                o[INDEX2(i,numComp,7)] = f_000[i]*c0 + f_111[i]*c3 + c2*(f_011[i] + f_101[i] + f_110[i]) + c1*(f_001[i] + f_010[i] + f_100[i]);
2264                            } // end of component loop i
2265                        } // end of k0 loop
2266                    } // end of k1 loop
2267                } // end of k2 loop
2268            } // end of parallel section
2269      }      }
2270  }  }
2271    
# Line 2015  void Brick::interpolateNodesOnFaces(escr Line 2279  void Brick::interpolateNodesOnFaces(escr
2279          const double c0 = .25;          const double c0 = .25;
2280  #pragma omp parallel  #pragma omp parallel
2281          {          {
2282                vector<double> f_000(numComp);
2283                vector<double> f_001(numComp);
2284                vector<double> f_010(numComp);
2285                vector<double> f_011(numComp);
2286                vector<double> f_100(numComp);
2287                vector<double> f_101(numComp);
2288                vector<double> f_110(numComp);
2289                vector<double> f_111(numComp);
2290              if (m_faceOffset[0] > -1) {              if (m_faceOffset[0] > -1) {
2291  #pragma omp for nowait  #pragma omp for nowait
2292                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2293                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
2294                          const double* f_011 = in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2295                          const double* f_010 = in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2296                          const double* f_001 = in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2297                          const double* f_000 = in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2298                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));
2299                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2300                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_010[i] + f_011[i]);                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_010[i] + f_011[i]);
# Line 2034  void Brick::interpolateNodesOnFaces(escr Line 2306  void Brick::interpolateNodesOnFaces(escr
2306  #pragma omp for nowait  #pragma omp for nowait
2307                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2308                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
2309                          const double* f_110 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2310                          const double* f_100 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2311                          const double* f_101 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2312                          const double* f_111 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2313                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));
2314                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2315                              o[INDEX2(i,numComp,0)] = c0*(f_100[i] + f_101[i] + f_110[i] + f_111[i]);                              o[INDEX2(i,numComp,0)] = c0*(f_100[i] + f_101[i] + f_110[i] + f_111[i]);
# Line 2049  void Brick::interpolateNodesOnFaces(escr Line 2321  void Brick::interpolateNodesOnFaces(escr
2321  #pragma omp for nowait  #pragma omp for nowait
2322                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2323                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2324                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1)), numComp*sizeof(double));
2325                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2326                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1)), numComp*sizeof(double));
2327                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2328                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));
2329                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2330                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_100[i] + f_101[i]);                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_100[i] + f_101[i]);
# Line 2064  void Brick::interpolateNodesOnFaces(escr Line 2336  void Brick::interpolateNodesOnFaces(escr
2336  #pragma omp for nowait  #pragma omp for nowait
2337                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2338                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2339                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
2340                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2341                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
2342                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2343                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));
2344                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2345                              o[INDEX2(i,numComp,0)] = c0*(f_010[i] + f_011[i] + f_110[i] + f_111[i]);                              o[INDEX2(i,numComp,0)] = c0*(f_010[i] + f_011[i] + f_110[i] + f_111[i]);
# Line 2079  void Brick::interpolateNodesOnFaces(escr Line 2351  void Brick::interpolateNodesOnFaces(escr
2351  #pragma omp for nowait  #pragma omp for nowait
2352                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
2353                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2354                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1)), numComp*sizeof(double));
2355                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
2356                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1)), numComp*sizeof(double));
2357                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
2358                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));
2359                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2360                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_010[i] + f_100[i] + f_110[i]);                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_010[i] + f_100[i] + f_110[i]);
# Line 2094  void Brick::interpolateNodesOnFaces(escr Line 2366  void Brick::interpolateNodesOnFaces(escr
2366  #pragma omp for nowait  #pragma omp for nowait
2367                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
2368                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2369                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2370                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2371                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2372                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2373                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));
2374                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2375                              o[INDEX2(i,numComp,0)] = c0*(f_001[i] + f_011[i] + f_101[i] + f_111[i]);                              o[INDEX2(i,numComp,0)] = c0*(f_001[i] + f_011[i] + f_101[i] + f_111[i]);
# Line 2113  void Brick::interpolateNodesOnFaces(escr Line 2385  void Brick::interpolateNodesOnFaces(escr
2385          const double c2 = 0.62200846792814621559;          const double c2 = 0.62200846792814621559;
2386  #pragma omp parallel  #pragma omp parallel
2387          {          {
2388                vector<double> f_000(numComp);
2389                vector<double> f_001(numComp);
2390                vector<double> f_010(numComp);
2391                vector<double> f_011(numComp);
2392                vector<double> f_100(numComp);
2393                vector<double> f_101(numComp);
2394                vector<double> f_110(numComp);
2395                vector<double> f_111(numComp);
2396              if (m_faceOffset[0] > -1) {              if (m_faceOffset[0] > -1) {
2397  #pragma omp for nowait  #pragma omp for nowait
2398                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2399                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
2400                          const double* f_000 = in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(0,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2401                          const double* f_001 = in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(0,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2402                          const double* f_011 = in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2403                          const double* f_010 = in.getSampleDataRO(INDEX3(0,k1+1,k2, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2404                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE1));
2405                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2406                              o[INDEX2(i,numComp,0)] = f_000[i]*c2 + f_011[i]*c0 + c1*(f_001[i] + f_010[i]);                              o[INDEX2(i,numComp,0)] = f_000[i]*c2 + f_011[i]*c0 + c1*(f_001[i] + f_010[i]);
# Line 2135  void Brick::interpolateNodesOnFaces(escr Line 2415  void Brick::interpolateNodesOnFaces(escr
2415  #pragma omp for nowait  #pragma omp for nowait
2416                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2417                      for (index_t k1=0; k1 < m_NE1; ++k1) {                      for (index_t k1=0; k1 < m_NE1; ++k1) {
2418                          const double* f_101 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1)), numComp*sizeof(double));
2419                          const double* f_100 = in.getSampleDataRO(INDEX3(m_N0-1,k1,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(m_N0-1,k1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2420                          const double* f_110 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2, m_N0,m_N1)), numComp*sizeof(double));
2421                          const double* f_111 = in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_N0-1,k1+1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2422                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE1));
2423                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2424                              o[INDEX2(i,numComp,0)] = f_100[i]*c2 + f_111[i]*c0 + c1*(f_101[i] + f_110[i]);                              o[INDEX2(i,numComp,0)] = f_100[i]*c2 + f_111[i]*c0 + c1*(f_101[i] + f_110[i]);
# Line 2153  void Brick::interpolateNodesOnFaces(escr Line 2433  void Brick::interpolateNodesOnFaces(escr
2433  #pragma omp for nowait  #pragma omp for nowait
2434                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2435                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2436                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,0,k2, m_N0,m_N1)), numComp*sizeof(double));
2437                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2438                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1)), numComp*sizeof(double));
2439                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,0,k2, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2440                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE0));
2441                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2442                              o[INDEX2(i,numComp,0)] = f_000[i]*c2 + f_101[i]*c0 + c1*(f_001[i] + f_100[i]);                              o[INDEX2(i,numComp,0)] = f_000[i]*c2 + f_101[i]*c0 + c1*(f_001[i] + f_100[i]);
# Line 2171  void Brick::interpolateNodesOnFaces(escr Line 2451  void Brick::interpolateNodesOnFaces(escr
2451  #pragma omp for nowait  #pragma omp for nowait
2452                  for (index_t k2=0; k2 < m_NE2; ++k2) {                  for (index_t k2=0; k2 < m_NE2; ++k2) {
2453                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2454                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
2455                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2456                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,m_N1-1,k2, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2, m_N0,m_N1)), numComp*sizeof(double));
2457                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_N1-1,k2+1, m_N0,m_N1)), numComp*sizeof(double));
2458                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE0));
2459                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2460                              o[INDEX2(i,numComp,0)] = f_010[i]*c2 + f_111[i]*c0 + c1*(f_011[i] + f_110[i]);                              o[INDEX2(i,numComp,0)] = f_010[i]*c2 + f_111[i]*c0 + c1*(f_011[i] + f_110[i]);
# Line 2189  void Brick::interpolateNodesOnFaces(escr Line 2469  void Brick::interpolateNodesOnFaces(escr
2469  #pragma omp for nowait  #pragma omp for nowait
2470                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
2471                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2472                          const double* f_000 = in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1));                          memcpy(&f_000[0], in.getSampleDataRO(INDEX3(k0,k1,0, m_N0,m_N1)), numComp*sizeof(double));
2473                          const double* f_100 = in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1));                          memcpy(&f_010[0], in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
2474                          const double* f_110 = in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1));                          memcpy(&f_100[0], in.getSampleDataRO(INDEX3(k0+1,k1,0, m_N0,m_N1)), numComp*sizeof(double));
2475                          const double* f_010 = in.getSampleDataRO(INDEX3(k0,k1+1,0, m_N0,m_N1));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_N0,m_N1)), numComp*sizeof(double));
2476                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE0));
2477                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2478                              o[INDEX2(i,numComp,0)] = f_000[i]*c2 + f_110[i]*c0 + c1*(f_010[i] + f_100[i]);                              o[INDEX2(i,numComp,0)] = f_000[i]*c2 + f_110[i]*c0 + c1*(f_010[i] + f_100[i]);
# Line 2207  void Brick::interpolateNodesOnFaces(escr Line 2487  void Brick::interpolateNodesOnFaces(escr
2487  #pragma omp for nowait  #pragma omp for nowait
2488                  for (index_t k1=0; k1 < m_NE1; ++k1) {                  for (index_t k1=0; k1 < m_NE1; ++k1) {
2489                      for (index_t k0=0; k0 < m_NE0; ++k0) {                      for (index_t k0=0; k0 < m_NE0; ++k0) {
2490                          const double* f_001 = in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_001[0], in.getSampleDataRO(INDEX3(k0,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2491                          const double* f_101 = in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2492                          const double* f_011 = in.getSampleDataRO(INDEX3(k0,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,k1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2493                          const double* f_111 = in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_N2-1, m_N0,m_N1)), numComp*sizeof(double));
2494                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE0));
2495                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2496                              o[INDEX2(i,numComp,0)] = f_001[i]*c2 + f_111[i]*c0 + c1*(f_011[i] + f_101[i]);                              o[INDEX2(i,numComp,0)] = f_001[i]*c2 + f_111[i]*c0 + c1*(f_011[i] + f_101[i]);
# Line 3282  void Brick::assemblePDESingle(Paso_Syste Line 3562  void Brick::assemblePDESingle(Paso_Syste
3562                                  const double tmp380_1 = tmp195_0*w23;                                  const double tmp380_1 = tmp195_0*w23;
3563                                  const double tmp456_1 = tmp218_0*w27;                                  const double tmp456_1 = tmp218_0*w27;
3564                                  const double tmp288_1 = tmp154_0*w29;                                  const double tmp288_1 = tmp154_0*w29;
3565                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp20_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                                  EM_S[INDEX2(0,0,8)]+=tmp264_1 + tmp268_1 + tmp292_1 + tmp327_1 + tmp342_1 + tmp369_1 + tmp377_1 + tmp379_1 + tmp384_1 + tmp389_1 + tmp390_1 + tmp394_1 + tmp415_1 + tmp424_1 + tmp427_1 + tmp434_1 + tmp447_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1 + tmp452_1 + tmp453_1 + tmp454_1;
3566                                  EM_S[INDEX2(4,7,8)]+=tmp30_1 + tmp31_1 + tmp32_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp36_1 + tmp37_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp49_1 + tmp50_1 + tmp51_1;                                  EM_S[INDEX2(1,0,8)]+=tmp140_1 + tmp147_1 + tmp182_1 + tmp196_1 + tmp200_1 + tmp203_1 + tmp206_1 + tmp207_1 + tmp208_1 + tmp224_1 + tmp22_1 + tmp275_1 + tmp277_1 + tmp279_1 + tmp441_1 + tmp444_1 + tmp473_1 + tmp474_1 + tmp491_1 + tmp495_1 + tmp498_1 + tmp500_1 + tmp506_1 + tmp507_1 + tmp508_1 + tmp509_1 + tmp510_1 + tmp511_1 + tmp512_1 + tmp513_1;
3567                                  EM_S[INDEX2(1,3,8)]+=tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1 + tmp62_1 + tmp63_1 + tmp64_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp70_1 + tmp71_1 + tmp72_1 + tmp73_1 + tmp74_1 + tmp75_1 + tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;                                  EM_S[INDEX2(2,0,8)]+=tmp102_1 + tmp11_1 + tmp193_1 + tmp302_1 + tmp303_1 + tmp304_1 + tmp305_1 + tmp306_1 + tmp307_1 + tmp308_1 + tmp309_1 + tmp310_1 + tmp311_1 + tmp312_1 + tmp313_1 + tmp314_1 + tmp315_1 + tmp316_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp321_1 + tmp52_1 + tmp54_1 + tmp57_1 + tmp68_1 + tmp70_1 + tmp76_1 + tmp94_1;
                                 EM_S[INDEX2(6,4,8)]+=tmp100_1 + tmp101_1 + tmp102_1 + tmp103_1 + tmp104_1 + tmp105_1 + tmp59_1 + tmp63_1 + tmp67_1 + tmp74_1 + tmp75_1 + tmp80_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1 + tmp86_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp90_1 + tmp91_1 + tmp92_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1 + tmp97_1 + tmp98_1 + tmp99_1;  
3568                                  EM_S[INDEX2(3,0,8)]+=tmp106_1 + tmp107_1 + tmp108_1 + tmp109_1 + tmp110_1 + tmp111_1 + tmp112_1 + tmp113_1 + tmp114_1 + tmp115_1 + tmp116_1 + tmp117_1 + tmp118_1 + tmp119_1 + tmp120_1 + tmp121_1 + tmp35_1 + tmp38_1 + tmp41_1 + tmp42_1 + tmp47_1 + tmp50_1;                                  EM_S[INDEX2(3,0,8)]+=tmp106_1 + tmp107_1 + tmp108_1 + tmp109_1 + tmp110_1 + tmp111_1 + tmp112_1 + tmp113_1 + tmp114_1 + tmp115_1 + tmp116_1 + tmp117_1 + tmp118_1 + tmp119_1 + tmp120_1 + tmp121_1 + tmp35_1 + tmp38_1 + tmp41_1 + tmp42_1 + tmp47_1 + tmp50_1;
                                 EM_S[INDEX2(5,4,8)]+=tmp122_1 + tmp123_1 + tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp132_1 + tmp133_1 + tmp134_1 + tmp135_1 + tmp136_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp145_1 + tmp146_1 + tmp147_1 + tmp148_1 + tmp149_1 + tmp150_1 + tmp151_1;  
                                 EM_S[INDEX2(0,7,8)]+=tmp132_1 + tmp152_1 + tmp153_1 + tmp154_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp74_1;  
                                 EM_S[INDEX2(5,6,8)]+=tmp162_1 + tmp163_1 + tmp164_1 + tmp165_1 + tmp166_1 + tmp167_1 + tmp168_1 + tmp169_1 + tmp170_1 + tmp171_1 + tmp172_1 + tmp31_1 + tmp34_1 + tmp35_1 + tmp37_1 + tmp39_1 + tmp41_1 + tmp43_1 + tmp45_1 + tmp46_1 + tmp49_1 + tmp50_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp104_1 + tmp158_1 + tmp16_1 + tmp173_1 + tmp174_1 + tmp175_1 + tmp176_1 + tmp177_1 + tmp178_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp182_1 + tmp183_1 + tmp184_1 + tmp185_1 + tmp186_1 + tmp187_1 + tmp188_1 + tmp19_1 + tmp24_1 + tmp28_1 + tmp2_1 + tmp59_1 + tmp86_1 + tmp88_1 + tmp8_1 + tmp91_1 + tmp92_1 + tmp99_1;  
                                 EM_S[INDEX2(1,6,8)]+=tmp132_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp159_1 + tmp161_1 + tmp189_1 + tmp18_1 + tmp190_1 + tmp191_1 + tmp192_1 + tmp193_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp13_1 + tmp158_1 + tmp182_1 + tmp184_1 + tmp185_1 + tmp186_1 + tmp194_1 + tmp195_1 + tmp196_1 + tmp197_1 + tmp198_1 + tmp199_1 + tmp200_1 + tmp201_1 + tmp202_1 + tmp203_1 + tmp204_1 + tmp205_1 + tmp206_1 + tmp207_1 + tmp208_1 + tmp209_1 + tmp4_1 + tmp56_1 + tmp58_1 + tmp59_1 + tmp62_1 + tmp64_1 + tmp72_1 + tmp79_1;  
                                 EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp12_1 + tmp139_1 + tmp13_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp20_1 + tmp210_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp55_1 + tmp62_1 + tmp64_1 + tmp72_1 + tmp79_1 + tmp80_1 + tmp81_1;  
                                 EM_S[INDEX2(2,5,8)]+=tmp153_1 + tmp155_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp18_1 + tmp222_1 + tmp223_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp74_1;  
                                 EM_S[INDEX2(0,3,8)]+=tmp107_1 + tmp109_1 + tmp110_1 + tmp115_1 + tmp116_1 + tmp117_1 + tmp166_1 + tmp169_1 + tmp227_1 + tmp228_1 + tmp229_1 + tmp230_1 + tmp231_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1 + tmp236_1 + tmp237_1 + tmp238_1 + tmp239_1 + tmp41_1;  
                                 EM_S[INDEX2(7,2,8)]+=tmp112_1 + tmp113_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp243_1 + tmp244_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp249_1 + tmp250_1 + tmp251_1 + tmp252_1 + tmp253_1 + tmp254_1 + tmp255_1 + tmp35_1 + tmp46_1 + tmp49_1 + tmp50_1;  
3569                                  EM_S[INDEX2(4,0,8)]+=tmp104_1 + tmp105_1 + tmp124_1 + tmp130_1 + tmp138_1 + tmp139_1 + tmp148_1 + tmp150_1 + tmp151_1 + tmp175_1 + tmp181_1 + tmp18_1 + tmp195_1 + tmp204_1 + tmp20_1 + tmp216_1 + tmp218_1 + tmp256_1 + tmp257_1 + tmp258_1 + tmp259_1 + tmp260_1 + tmp261_1 + tmp262_1 + tmp263_1 + tmp80_1 + tmp85_1 + tmp91_1 + tmp92_1 + tmp99_1;                                  EM_S[INDEX2(4,0,8)]+=tmp104_1 + tmp105_1 + tmp124_1 + tmp130_1 + tmp138_1 + tmp139_1 + tmp148_1 + tmp150_1 + tmp151_1 + tmp175_1 + tmp181_1 + tmp18_1 + tmp195_1 + tmp204_1 + tmp20_1 + tmp216_1 + tmp218_1 + tmp256_1 + tmp257_1 + tmp258_1 + tmp259_1 + tmp260_1 + tmp261_1 + tmp262_1 + tmp263_1 + tmp80_1 + tmp85_1 + tmp91_1 + tmp92_1 + tmp99_1;
3570                                    EM_S[INDEX2(5,0,8)]+=tmp229_1 + tmp235_1 + tmp237_1 + tmp238_1 + tmp242_1 + tmp334_1 + tmp339_1 + tmp347_1 + tmp349_1 + tmp414_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp422_1 + tmp440_1 + tmp461_1 + tmp462_1 + tmp463_1 + tmp464_1 + tmp465_1 + tmp466_1;
3571                                    EM_S[INDEX2(6,0,8)]+=tmp163_1 + tmp166_1 + tmp169_1 + tmp172_1 + tmp234_1 + tmp236_1 + tmp240_1 + tmp248_1 + tmp250_1 + tmp254_1 + tmp338_1 + tmp340_1 + tmp407_1 + tmp416_1 + tmp421_1 + tmp484_1 + tmp485_1 + tmp486_1 + tmp487_1 + tmp488_1 + tmp489_1 + tmp490_1;
3572                                    EM_S[INDEX2(7,0,8)]+=tmp132_1 + tmp155_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp518_1 + tmp519_1 + tmp520_1 + tmp521_1 + tmp522_1 + tmp523_1 + tmp74_1;
3573                                    EM_S[INDEX2(0,1,8)]+=tmp130_1 + tmp138_1 + tmp140_1 + tmp147_1 + tmp148_1 + tmp151_1 + tmp218_1 + tmp224_1 + tmp258_1 + tmp259_1 + tmp277_1 + tmp302_1 + tmp307_1 + tmp310_1 + tmp325_1 + tmp354_1 + tmp359_1 + tmp441_1 + tmp444_1 + tmp507_1 + tmp508_1 + tmp511_1 + tmp512_1 + tmp52_1 + tmp57_1 + tmp61_1 + tmp67_1 + tmp70_1 + tmp71_1 + tmp76_1;
3574                                    EM_S[INDEX2(1,1,8)]+=tmp109_1 + tmp116_1 + tmp284_1 + tmp294_1 + tmp300_1 + tmp334_1 + tmp339_1 + tmp375_1 + tmp384_1 + tmp387_1 + tmp388_1 + tmp425_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1 + tmp430_1 + tmp431_1 + tmp432_1 + tmp433_1 + tmp434_1 + tmp435_1 + tmp436_1 + tmp437_1;
3575                                    EM_S[INDEX2(2,1,8)]+=tmp107_1 + tmp110_1 + tmp112_1 + tmp113_1 + tmp115_1 + tmp117_1 + tmp118_1 + tmp120_1 + tmp166_1 + tmp167_1 + tmp169_1 + tmp228_1 + tmp234_1 + tmp236_1 + tmp239_1 + tmp264_1 + tmp268_1 + tmp35_1 + tmp41_1 + tmp501_1 + tmp502_1 + tmp50_1;
3576                                    EM_S[INDEX2(3,1,8)]+=tmp136_1 + tmp14_1 + tmp15_1 + tmp21_1 + tmp25_1 + tmp26_1 + tmp279_1 + tmp29_1 + tmp356_1 + tmp357_1 + tmp358_1 + tmp491_1 + tmp492_1 + tmp495_1 + tmp496_1 + tmp498_1 + tmp500_1 + tmp510_1 + tmp513_1 + tmp54_1 + tmp5_1 + tmp65_1 + tmp66_1 + tmp68_1 + tmp69_1 + tmp73_1 + tmp74_1 + tmp75_1 + tmp77_1 + tmp78_1;
3577                                    EM_S[INDEX2(4,1,8)]+=tmp229_1 + tmp235_1 + tmp237_1 + tmp238_1 + tmp242_1 + tmp248_1 + tmp250_1 + tmp362_1 + tmp403_1 + tmp410_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp421_1 + tmp422_1 + tmp423_1 + tmp424_1;
3578                                    EM_S[INDEX2(5,1,8)]+=tmp13_1 + tmp158_1 + tmp182_1 + tmp184_1 + tmp185_1 + tmp186_1 + tmp194_1 + tmp195_1 + tmp196_1 + tmp197_1 + tmp198_1 + tmp199_1 + tmp200_1 + tmp201_1 + tmp202_1 + tmp203_1 + tmp204_1 + tmp205_1 + tmp206_1 + tmp207_1 + tmp208_1 + tmp209_1 + tmp4_1 + tmp56_1 + tmp58_1 + tmp59_1 + tmp62_1 + tmp64_1 + tmp72_1 + tmp79_1;
3579                                    EM_S[INDEX2(6,1,8)]+=tmp132_1 + tmp155_1 + tmp159_1 + tmp161_1 + tmp18_1 + tmp193_1 + tmp222_1 + tmp223_1 + tmp521_1 + tmp522_1 + tmp528_1 + tmp529_1;
3580                                    EM_S[INDEX2(7,1,8)]+=tmp108_1 + tmp121_1 + tmp297_1 + tmp299_1 + tmp346_1 + tmp347_1 + tmp349_1 + tmp350_1 + tmp404_1 + tmp405_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp40_1 + tmp42_1 + tmp461_1 + tmp466_1 + tmp467_1 + tmp468_1 + tmp469_1 + tmp47_1 + tmp48_1;
3581                                    EM_S[INDEX2(0,2,8)]+=tmp102_1 + tmp104_1 + tmp141_1 + tmp176_1 + tmp186_1 + tmp188_1 + tmp193_1 + tmp216_1 + tmp260_1 + tmp261_1 + tmp275_1 + tmp304_1 + tmp313_1 + tmp316_1 + tmp317_1 + tmp320_1 + tmp491_1 + tmp495_1 + tmp497_1 + tmp498_1 + tmp499_1 + tmp500_1 + tmp506_1 + tmp509_1 + tmp54_1 + tmp68_1 + tmp91_1 + tmp92_1 + tmp94_1 + tmp99_1;
3582                                  EM_S[INDEX2(1,2,8)]+=tmp107_1 + tmp108_1 + tmp110_1 + tmp114_1 + tmp115_1 + tmp117_1 + tmp119_1 + tmp121_1 + tmp229_1 + tmp231_1 + tmp233_1 + tmp235_1 + tmp237_1 + tmp238_1 + tmp264_1 + tmp265_1 + tmp266_1 + tmp267_1 + tmp268_1 + tmp41_1 + tmp42_1 + tmp47_1;                                  EM_S[INDEX2(1,2,8)]+=tmp107_1 + tmp108_1 + tmp110_1 + tmp114_1 + tmp115_1 + tmp117_1 + tmp119_1 + tmp121_1 + tmp229_1 + tmp231_1 + tmp233_1 + tmp235_1 + tmp237_1 + tmp238_1 + tmp264_1 + tmp265_1 + tmp266_1 + tmp267_1 + tmp268_1 + tmp41_1 + tmp42_1 + tmp47_1;
3583                                  EM_S[INDEX2(6,7,8)]+=tmp122_1 + tmp125_1 + tmp131_1 + tmp134_1 + tmp142_1 + tmp146_1 + tmp16_1 + tmp174_1 + tmp182_1 + tmp187_1 + tmp224_1 + tmp22_1 + tmp24_1 + tmp269_1 + tmp270_1 + tmp271_1 + tmp272_1 + tmp273_1 + tmp274_1 + tmp275_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp279_1 + tmp280_1 + tmp281_1 + tmp28_1 + tmp6_1 + tmp7_1 + tmp8_1;                                  EM_S[INDEX2(2,2,8)]+=tmp109_1 + tmp116_1 + tmp283_1 + tmp287_1 + tmp295_1 + tmp338_1 + tmp340_1 + tmp345_1 + tmp353_1 + tmp366_1 + tmp367_1 + tmp368_1 + tmp369_1 + tmp370_1 + tmp371_1 + tmp372_1 + tmp373_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp377_1 + tmp378_1 + tmp379_1 + tmp380_1;
3584                                    EM_S[INDEX2(3,2,8)]+=tmp132_1 + tmp137_1 + tmp16_1 + tmp177_1 + tmp178_1 + tmp17_1 + tmp185_1 + tmp24_1 + tmp278_1 + tmp27_1 + tmp281_1 + tmp28_1 + tmp308_1 + tmp312_1 + tmp314_1 + tmp3_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp52_1 + tmp53_1 + tmp57_1 + tmp60_1 + tmp63_1 + tmp70_1 + tmp76_1 + tmp8_1;
3585                                    EM_S[INDEX2(4,2,8)]+=tmp163_1 + tmp166_1 + tmp169_1 + tmp172_1 + tmp234_1 + tmp236_1 + tmp343_1 + tmp347_1 + tmp349_1 + tmp351_1 + tmp407_1 + tmp450_1 + tmp451_1 + tmp464_1 + tmp465_1 + tmp484_1 + tmp485_1 + tmp487_1 + tmp490_1 + tmp503_1 + tmp504_1 + tmp505_1;
3586                                    EM_S[INDEX2(5,2,8)]+=tmp155_1 + tmp159_1 + tmp161_1 + tmp189_1 + tmp18_1 + tmp190_1 + tmp224_1 + tmp519_1 + tmp523_1 + tmp526_1 + tmp527_1 + tmp74_1;
3587                                    EM_S[INDEX2(6,2,8)]+=tmp145_1 + tmp158_1 + tmp173_1 + tmp175_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp183_1 + tmp184_1 + tmp19_1 + tmp213_1 + tmp217_1 + tmp219_1 + tmp221_1 + tmp2_1 + tmp303_1 + tmp309_1 + tmp311_1 + tmp315_1 + tmp318_1 + tmp319_1 + tmp321_1 + tmp323_1 + tmp325_1 + tmp326_1 + tmp358_1 + tmp493_1 + tmp494_1 + tmp524_1 + tmp525_1;
3588                                    EM_S[INDEX2(7,2,8)]+=tmp112_1 + tmp113_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp243_1 + tmp244_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp249_1 + tmp250_1 + tmp251_1 + tmp252_1 + tmp253_1 + tmp254_1 + tmp255_1 + tmp35_1 + tmp46_1 + tmp49_1 + tmp50_1;
3589                                    EM_S[INDEX2(0,3,8)]+=tmp107_1 + tmp109_1 + tmp110_1 + tmp115_1 + tmp116_1 + tmp117_1 + tmp166_1 + tmp169_1 + tmp227_1 + tmp228_1 + tmp229_1 + tmp230_1 + tmp231_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1 + tmp236_1 + tmp237_1 + tmp238_1 + tmp239_1 + tmp41_1;
3590                                    EM_S[INDEX2(1,3,8)]+=tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1 + tmp62_1 + tmp63_1 + tmp64_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp70_1 + tmp71_1 + tmp72_1 + tmp73_1 + tmp74_1 + tmp75_1 + tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;
3591                                    EM_S[INDEX2(2,3,8)]+=tmp132_1 + tmp136_1 + tmp137_1 + tmp139_1 + tmp141_1 + tmp145_1 + tmp210_1 + tmp213_1 + tmp217_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp278_1 + tmp281_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp491_1 + tmp492_1 + tmp493_1 + tmp494_1 + tmp495_1 + tmp496_1 + tmp497_1 + tmp498_1 + tmp499_1 + tmp500_1;
3592                                  EM_S[INDEX2(3,3,8)]+=tmp249_1 + tmp255_1 + tmp264_1 + tmp268_1 + tmp282_1 + tmp283_1 + tmp284_1 + tmp285_1 + tmp286_1 + tmp287_1 + tmp288_1 + tmp289_1 + tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp297_1 + tmp298_1 + tmp299_1 + tmp300_1 + tmp301_1;                                  EM_S[INDEX2(3,3,8)]+=tmp249_1 + tmp255_1 + tmp264_1 + tmp268_1 + tmp282_1 + tmp283_1 + tmp284_1 + tmp285_1 + tmp286_1 + tmp287_1 + tmp288_1 + tmp289_1 + tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp297_1 + tmp298_1 + tmp299_1 + tmp300_1 + tmp301_1;
3593                                  EM_S[INDEX2(2,0,8)]+=tmp102_1 + tmp11_1 + tmp193_1 + tmp302_1 + tmp303_1 + tmp304_1 + tmp305_1 + tmp306_1 + tmp307_1 + tmp308_1 + tmp309_1 + tmp310_1 + tmp311_1 + tmp312_1 + tmp313_1 + tmp314_1 + tmp315_1 + tmp316_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp321_1 + tmp52_1 + tmp54_1 + tmp57_1 + tmp68_1 + tmp70_1 + tmp76_1 + tmp94_1;                                  EM_S[INDEX2(4,3,8)]+=tmp152_1 + tmp154_1 + tmp155_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp193_1 + tmp224_1 + tmp526_1 + tmp527_1 + tmp528_1 + tmp529_1;
3594                                  EM_S[INDEX2(7,6,8)]+=tmp101_1 + tmp125_1 + tmp134_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp221_1 + tmp224_1 + tmp270_1 + tmp271_1 + tmp274_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp281_1 + tmp310_1 + tmp322_1 + tmp323_1 + tmp324_1 + tmp325_1 + tmp326_1 + tmp67_1 + tmp82_1 + tmp87_1 + tmp90_1 + tmp97_1 + tmp98_1;                                  EM_S[INDEX2(5,3,8)]+=tmp108_1 + tmp121_1 + tmp245_1 + tmp248_1 + tmp250_1 + tmp251_1 + tmp387_1 + tmp388_1 + tmp403_1 + tmp404_1 + tmp405_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp40_1 + tmp410_1 + tmp411_1 + tmp412_1 + tmp42_1 + tmp47_1 + tmp48_1;
                                 EM_S[INDEX2(4,4,8)]+=tmp162_1 + tmp170_1 + tmp284_1 + tmp287_1 + tmp290_1 + tmp292_1 + tmp293_1 + tmp298_1 + tmp327_1 + tmp328_1 + tmp329_1 + tmp330_1 + tmp331_1 + tmp332_1 + tmp333_1 + tmp334_1 + tmp335_1 + tmp336_1 + tmp337_1 + tmp338_1 + tmp339_1 + tmp340_1 + tmp341_1 + tmp342_1;  
3595                                  EM_S[INDEX2(6,3,8)]+=tmp112_1 + tmp113_1 + tmp241_1 + tmp242_1 + tmp246_1 + tmp247_1 + tmp252_1 + tmp343_1 + tmp344_1 + tmp345_1 + tmp346_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp352_1 + tmp353_1 + tmp35_1 + tmp46_1 + tmp49_1 + tmp50_1;                                  EM_S[INDEX2(6,3,8)]+=tmp112_1 + tmp113_1 + tmp241_1 + tmp242_1 + tmp246_1 + tmp247_1 + tmp252_1 + tmp343_1 + tmp344_1 + tmp345_1 + tmp346_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp352_1 + tmp353_1 + tmp35_1 + tmp46_1 + tmp49_1 + tmp50_1;
3596                                    EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp20_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
3597                                    EM_S[INDEX2(0,4,8)]+=tmp11_1 + tmp175_1 + tmp17_1 + tmp181_1 + tmp18_1 + tmp195_1 + tmp200_1 + tmp203_1 + tmp204_1 + tmp206_1 + tmp208_1 + tmp20_1 + tmp22_1 + tmp256_1 + tmp257_1 + tmp262_1 + tmp263_1 + tmp26_1 + tmp305_1 + tmp306_1 + tmp309_1 + tmp311_1 + tmp315_1 + tmp318_1 + tmp470_1 + tmp471_1 + tmp472_1 + tmp473_1 + tmp474_1 + tmp475_1;
3598                                    EM_S[INDEX2(1,4,8)]+=tmp118_1 + tmp120_1 + tmp242_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp35_1 + tmp37_1 + tmp39_1 + tmp414_1 + tmp415_1 + tmp417_1 + tmp418_1 + tmp422_1 + tmp424_1 + tmp461_1 + tmp464_1 + tmp465_1 + tmp466_1 + tmp482_1 + tmp483_1 + tmp50_1;
3599                                    EM_S[INDEX2(2,4,8)]+=tmp114_1 + tmp119_1 + tmp240_1 + tmp248_1 + tmp250_1 + tmp254_1 + tmp32_1 + tmp407_1 + tmp411_1 + tmp416_1 + tmp421_1 + tmp42_1 + tmp450_1 + tmp451_1 + tmp47_1 + tmp484_1 + tmp485_1 + tmp487_1 + tmp490_1 + tmp51_1 + tmp538_1 + tmp539_1;
3600                                    EM_S[INDEX2(3,4,8)]+=tmp155_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp191_1 + tmp192_1 + tmp193_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp518_1 + tmp520_1;
3601                                    EM_S[INDEX2(4,4,8)]+=tmp162_1 + tmp170_1 + tmp284_1 + tmp287_1 + tmp290_1 + tmp292_1 + tmp293_1 + tmp298_1 + tmp327_1 + tmp328_1 + tmp329_1 + tmp330_1 + tmp331_1 + tmp332_1 + tmp333_1 + tmp334_1 + tmp335_1 + tmp336_1 + tmp337_1 + tmp338_1 + tmp339_1 + tmp340_1 + tmp341_1 + tmp342_1;
3602                                    EM_S[INDEX2(5,4,8)]+=tmp122_1 + tmp123_1 + tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp132_1 + tmp133_1 + tmp134_1 + tmp135_1 + tmp136_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp145_1 + tmp146_1 + tmp147_1 + tmp148_1 + tmp149_1 + tmp150_1 + tmp151_1;
3603                                    EM_S[INDEX2(6,4,8)]+=tmp100_1 + tmp101_1 + tmp102_1 + tmp103_1 + tmp104_1 + tmp105_1 + tmp59_1 + tmp63_1 + tmp67_1 + tmp74_1 + tmp75_1 + tmp80_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1 + tmp86_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp90_1 + tmp91_1 + tmp92_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1 + tmp97_1 + tmp98_1 + tmp99_1;
3604                                    EM_S[INDEX2(7,4,8)]+=tmp163_1 + tmp165_1 + tmp166_1 + tmp169_1 + tmp171_1 + tmp172_1 + tmp229_1 + tmp232_1 + tmp238_1 + tmp31_1 + tmp33_1 + tmp34_1 + tmp363_1 + tmp364_1 + tmp419_1 + tmp41_1 + tmp420_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp530_1 + tmp531_1;
3605                                    EM_S[INDEX2(0,5,8)]+=tmp118_1 + tmp120_1 + tmp242_1 + tmp248_1 + tmp250_1 + tmp253_1 + tmp334_1 + tmp339_1 + tmp35_1 + tmp37_1 + tmp39_1 + tmp403_1 + tmp410_1 + tmp414_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp421_1 + tmp422_1 + tmp50_1 + tmp536_1 + tmp537_1;
3606                                  EM_S[INDEX2(1,5,8)]+=tmp127_1 + tmp128_1 + tmp130_1 + tmp138_1 + tmp13_1 + tmp145_1 + tmp148_1 + tmp14_1 + tmp151_1 + tmp158_1 + tmp15_1 + tmp184_1 + tmp194_1 + tmp195_1 + tmp201_1 + tmp202_1 + tmp204_1 + tmp205_1 + tmp21_1 + tmp25_1 + tmp319_1 + tmp325_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp4_1;                                  EM_S[INDEX2(1,5,8)]+=tmp127_1 + tmp128_1 + tmp130_1 + tmp138_1 + tmp13_1 + tmp145_1 + tmp148_1 + tmp14_1 + tmp151_1 + tmp158_1 + tmp15_1 + tmp184_1 + tmp194_1 + tmp195_1 + tmp201_1 + tmp202_1 + tmp204_1 + tmp205_1 + tmp21_1 + tmp25_1 + tmp319_1 + tmp325_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp4_1;
3607                                  EM_S[INDEX2(3,6,8)]+=tmp229_1 + tmp231_1 + tmp233_1 + tmp238_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp250_1 + tmp251_1 + tmp252_1 + tmp254_1 + tmp345_1 + tmp353_1 + tmp361_1 + tmp362_1 + tmp363_1 + tmp364_1 + tmp365_1;                                  EM_S[INDEX2(2,5,8)]+=tmp153_1 + tmp155_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp18_1 + tmp222_1 + tmp223_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp74_1;
3608                                  EM_S[INDEX2(2,2,8)]+=tmp109_1 + tmp116_1 + tmp283_1 + tmp287_1 + tmp295_1 + tmp338_1 + tmp340_1 + tmp345_1 + tmp353_1 + tmp366_1 + tmp367_1 + tmp368_1 + tmp369_1 + tmp370_1 + tmp371_1 + tmp372_1 + tmp373_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp377_1 + tmp378_1 + tmp379_1 + tmp380_1;                                  EM_S[INDEX2(3,5,8)]+=tmp165_1 + tmp166_1 + tmp169_1 + tmp171_1 + tmp228_1 + tmp239_1 + tmp346_1 + tmp347_1 + tmp349_1 + tmp350_1 + tmp387_1 + tmp388_1 + tmp404_1 + tmp405_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp461_1 + tmp466_1 + tmp504_1 + tmp516_1 + tmp517_1;
                                 EM_S[INDEX2(7,7,8)]+=tmp162_1 + tmp170_1 + tmp282_1 + tmp292_1 + tmp301_1 + tmp345_1 + tmp353_1 + tmp369_1 + tmp381_1 + tmp382_1 + tmp383_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1 + tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp396_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp101_1 + tmp10_1 + tmp11_1 + tmp14_1 + tmp15_1 + tmp193_1 + tmp21_1 + tmp25_1 + tmp310_1 + tmp312_1 + tmp317_1 + tmp319_1 + tmp322_1 + tmp324_1 + tmp355_1 + tmp360_1 + tmp397_1 + tmp398_1 + tmp399_1 + tmp400_1 + tmp401_1 + tmp402_1 + tmp66_1 + tmp77_1 + tmp82_1 + tmp84_1 + tmp87_1 + tmp95_1 + tmp97_1 + tmp9_1;  
                                 EM_S[INDEX2(5,3,8)]+=tmp108_1 + tmp121_1 + tmp245_1 + tmp248_1 + tmp250_1 + tmp251_1 + tmp387_1 + tmp388_1 + tmp403_1 + tmp404_1 + tmp405_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp40_1 + tmp410_1 + tmp411_1 + tmp412_1 + tmp42_1 + tmp47_1 + tmp48_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp229_1 + tmp235_1 + tmp237_1 + tmp238_1 + tmp242_1 + tmp248_1 + tmp250_1 + tmp362_1 + tmp403_1 + tmp410_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp421_1 + tmp422_1 + tmp423_1 + tmp424_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp109_1 + tmp116_1 + tmp284_1 + tmp294_1 + tmp300_1 + tmp334_1 + tmp339_1 + tmp375_1 + tmp384_1 + tmp387_1 + tmp388_1 + tmp425_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1 + tmp430_1 + tmp431_1 + tmp432_1 + tmp433_1 + tmp434_1 + tmp435_1 + tmp436_1 + tmp437_1;  
                                 EM_S[INDEX2(2,7,8)]+=tmp229_1 + tmp231_1 + tmp233_1 + tmp238_1 + tmp241_1 + tmp242_1 + tmp246_1 + tmp247_1 + tmp249_1 + tmp252_1 + tmp255_1 + tmp343_1 + tmp346_1 + tmp347_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp363_1 + tmp364_1 + tmp438_1 + tmp439_1 + tmp440_1;  
                                 EM_S[INDEX2(3,2,8)]+=tmp132_1 + tmp137_1 + tmp16_1 + tmp177_1 + tmp178_1 + tmp17_1 + tmp185_1 + tmp24_1 + tmp278_1 + tmp27_1 + tmp281_1 + tmp28_1 + tmp308_1 + tmp312_1 + tmp314_1 + tmp3_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp52_1 + tmp53_1 + tmp57_1 + tmp60_1 + tmp63_1 + tmp70_1 + tmp76_1 + tmp8_1;  
                                 EM_S[INDEX2(0,0,8)]+=tmp264_1 + tmp268_1 + tmp292_1 + tmp327_1 + tmp342_1 + tmp369_1 + tmp377_1 + tmp379_1 + tmp384_1 + tmp389_1 + tmp390_1 + tmp394_1 + tmp415_1 + tmp424_1 + tmp427_1 + tmp434_1 + tmp447_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1 + tmp452_1 + tmp453_1 + tmp454_1;  
                                 EM_S[INDEX2(6,6,8)]+=tmp249_1 + tmp255_1 + tmp284_1 + tmp335_1 + tmp33_1 + tmp341_1 + tmp366_1 + tmp375_1 + tmp378_1 + tmp381_1 + tmp384_1 + tmp392_1 + tmp431_1 + tmp433_1 + tmp435_1 + tmp44_1 + tmp450_1 + tmp451_1 + tmp455_1 + tmp456_1 + tmp457_1 + tmp458_1 + tmp459_1 + tmp460_1;  
                                 EM_S[INDEX2(5,0,8)]+=tmp229_1 + tmp235_1 + tmp237_1 + tmp238_1 + tmp242_1 + tmp334_1 + tmp339_1 + tmp347_1 + tmp349_1 + tmp414_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp422_1 + tmp440_1 + tmp461_1 + tmp462_1 + tmp463_1 + tmp464_1 + tmp465_1 + tmp466_1;  
                                 EM_S[INDEX2(7,1,8)]+=tmp108_1 + tmp121_1 + tmp297_1 + tmp299_1 + tmp346_1 + tmp347_1 + tmp349_1 + tmp350_1 + tmp404_1 + tmp405_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp40_1 + tmp42_1 + tmp461_1 + tmp466_1 + tmp467_1 + tmp468_1 + tmp469_1 + tmp47_1 + tmp48_1;  
3609                                  EM_S[INDEX2(4,5,8)]+=tmp101_1 + tmp125_1 + tmp126_1 + tmp129_1 + tmp132_1 + tmp134_1 + tmp137_1 + tmp140_1 + tmp144_1 + tmp147_1 + tmp149_1 + tmp17_1 + tmp185_1 + tmp198_1 + tmp199_1 + tmp200_1 + tmp203_1 + tmp206_1 + tmp208_1 + tmp312_1 + tmp398_1 + tmp400_1 + tmp470_1 + tmp471_1 + tmp63_1 + tmp82_1 + tmp83_1 + tmp87_1 + tmp89_1 + tmp97_1;                                  EM_S[INDEX2(4,5,8)]+=tmp101_1 + tmp125_1 + tmp126_1 + tmp129_1 + tmp132_1 + tmp134_1 + tmp137_1 + tmp140_1 + tmp144_1 + tmp147_1 + tmp149_1 + tmp17_1 + tmp185_1 + tmp198_1 + tmp199_1 + tmp200_1 + tmp203_1 + tmp206_1 + tmp208_1 + tmp312_1 + tmp398_1 + tmp400_1 + tmp470_1 + tmp471_1 + tmp63_1 + tmp82_1 + tmp83_1 + tmp87_1 + tmp89_1 + tmp97_1;
                                 EM_S[INDEX2(0,4,8)]+=tmp11_1 + tmp175_1 + tmp17_1 + tmp181_1 + tmp18_1 + tmp195_1 + tmp200_1 + tmp203_1 + tmp204_1 + tmp206_1 + tmp208_1 + tmp20_1 + tmp22_1 + tmp256_1 + tmp257_1 + tmp262_1 + tmp263_1 + tmp26_1 + tmp305_1 + tmp306_1 + tmp309_1 + tmp311_1 + tmp315_1 + tmp318_1 + tmp470_1 + tmp471_1 + tmp472_1 + tmp473_1 + tmp474_1 + tmp475_1;  
3610                                  EM_S[INDEX2(5,5,8)]+=tmp287_1 + tmp297_1 + tmp299_1 + tmp328_1 + tmp336_1 + tmp33_1 + tmp369_1 + tmp372_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp385_1 + tmp391_1 + tmp415_1 + tmp424_1 + tmp425_1 + tmp436_1 + tmp44_1 + tmp476_1 + tmp477_1 + tmp478_1 + tmp479_1 + tmp480_1 + tmp481_1;                                  EM_S[INDEX2(5,5,8)]+=tmp287_1 + tmp297_1 + tmp299_1 + tmp328_1 + tmp336_1 + tmp33_1 + tmp369_1 + tmp372_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp385_1 + tmp391_1 + tmp415_1 + tmp424_1 + tmp425_1 + tmp436_1 + tmp44_1 + tmp476_1 + tmp477_1 + tmp478_1 + tmp479_1 + tmp480_1 + tmp481_1;
                                 EM_S[INDEX2(1,4,8)]+=tmp118_1 + tmp120_1 + tmp242_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp35_1 + tmp37_1 + tmp39_1 + tmp414_1 + tmp415_1 + tmp417_1 + tmp418_1 + tmp422_1 + tmp424_1 + tmp461_1 + tmp464_1 + tmp465_1 + tmp466_1 + tmp482_1 + tmp483_1 + tmp50_1;  
                                 EM_S[INDEX2(6,0,8)]+=tmp163_1 + tmp166_1 + tmp169_1 + tmp172_1 + tmp234_1 + tmp236_1 + tmp240_1 + tmp248_1 + tmp250_1 + tmp254_1 + tmp338_1 + tmp340_1 + tmp407_1 + tmp416_1 + tmp421_1 + tmp484_1 + tmp485_1 + tmp486_1 + tmp487_1 + tmp488_1 + tmp489_1 + tmp490_1;  
                                 EM_S[INDEX2(7,5,8)]+=tmp122_1 + tmp131_1 + tmp135_1 + tmp141_1 + tmp142_1 + tmp143_1 + tmp146_1 + tmp186_1 + tmp193_1 + tmp197_1 + tmp209_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp269_1 + tmp272_1 + tmp275_1 + tmp317_1 + tmp397_1 + tmp399_1 + tmp401_1 + tmp402_1 + tmp62_1 + tmp64_1 + tmp66_1 + tmp72_1 + tmp77_1 + tmp79_1 + tmp84_1 + tmp95_1;  
                                 EM_S[INDEX2(2,3,8)]+=tmp132_1 + tmp136_1 + tmp137_1 + tmp139_1 + tmp141_1 + tmp145_1 + tmp210_1 + tmp213_1 + tmp217_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp278_1 + tmp281_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp491_1 + tmp492_1 + tmp493_1 + tmp494_1 + tmp495_1 + tmp496_1 + tmp497_1 + tmp498_1 + tmp499_1 + tmp500_1;  
                                 EM_S[INDEX2(2,1,8)]+=tmp107_1 + tmp110_1 + tmp112_1 + tmp113_1 + tmp115_1 + tmp117_1 + tmp118_1 + tmp120_1 + tmp166_1 + tmp167_1 + tmp169_1 + tmp228_1 + tmp234_1 + tmp236_1 + tmp239_1 + tmp264_1 + tmp268_1 + tmp35_1 + tmp41_1 + tmp501_1 + tmp502_1 + tmp50_1;  
                                 EM_S[INDEX2(4,2,8)]+=tmp163_1 + tmp166_1 + tmp169_1 + tmp172_1 + tmp234_1 + tmp236_1 + tmp343_1 + tmp347_1 + tmp349_1 + tmp351_1 + tmp407_1 + tmp450_1 + tmp451_1 + tmp464_1 + tmp465_1 + tmp484_1 + tmp485_1 + tmp487_1 + tmp490_1 + tmp503_1 + tmp504_1 + tmp505_1;  
                                 EM_S[INDEX2(1,0,8)]+=tmp140_1 + tmp147_1 + tmp182_1 + tmp196_1 + tmp200_1 + tmp203_1 + tmp206_1 + tmp207_1 + tmp208_1 + tmp224_1 + tmp22_1 + tmp275_1 + tmp277_1 + tmp279_1 + tmp441_1 + tmp444_1 + tmp473_1 + tmp474_1 + tmp491_1 + tmp495_1 + tmp498_1 + tmp500_1 + tmp506_1 + tmp507_1 + tmp508_1 + tmp509_1 + tmp510_1 + tmp511_1 + tmp512_1 + tmp513_1;  
3611                                  EM_S[INDEX2(6,5,8)]+=tmp162_1 + tmp170_1 + tmp229_1 + tmp238_1 + tmp266_1 + tmp31_1 + tmp32_1 + tmp34_1 + tmp363_1 + tmp364_1 + tmp40_1 + tmp419_1 + tmp41_1 + tmp420_1 + tmp42_1 + tmp43_1 + tmp45_1 + tmp47_1 + tmp48_1 + tmp514_1 + tmp515_1 + tmp51_1;                                  EM_S[INDEX2(6,5,8)]+=tmp162_1 + tmp170_1 + tmp229_1 + tmp238_1 + tmp266_1 + tmp31_1 + tmp32_1 + tmp34_1 + tmp363_1 + tmp364_1 + tmp40_1 + tmp419_1 + tmp41_1 + tmp420_1 + tmp42_1 + tmp43_1 + tmp45_1 + tmp47_1 + tmp48_1 + tmp514_1 + tmp515_1 + tmp51_1;
3612                                  EM_S[INDEX2(3,5,8)]+=tmp165_1 + tmp166_1 + tmp169_1 + tmp171_1 + tmp228_1 + tmp239_1 + tmp346_1 + tmp347_1 + tmp349_1 + tmp350_1 + tmp387_1 + tmp388_1 + tmp404_1 + tmp405_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp461_1 + tmp466_1 + tmp504_1 + tmp516_1 + tmp517_1;                                  EM_S[INDEX2(7,5,8)]+=tmp122_1 + tmp131_1 + tmp135_1 + tmp141_1 + tmp142_1 + tmp143_1 + tmp146_1 + tmp186_1 + tmp193_1 + tmp197_1 + tmp209_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp269_1 + tmp272_1 + tmp275_1 + tmp317_1 + tmp397_1 + tmp399_1 + tmp401_1 + tmp402_1 + tmp62_1 + tmp64_1 + tmp66_1 + tmp72_1 + tmp77_1 + tmp79_1 + tmp84_1 + tmp95_1;
                                 EM_S[INDEX2(0,1,8)]+=tmp130_1 + tmp138_1 + tmp140_1 + tmp147_1 + tmp148_1 + tmp151_1 + tmp218_1 + tmp224_1 + tmp258_1 + tmp259_1 + tmp277_1 + tmp302_1 + tmp307_1 + tmp310_1 + tmp325_1 + tmp354_1 + tmp359_1 + tmp441_1 + tmp444_1 + tmp507_1 + tmp508_1 + tmp511_1 + tmp512_1 + tmp52_1 + tmp57_1 + tmp61_1 + tmp67_1 + tmp70_1 + tmp71_1 + tmp76_1;  
                                 EM_S[INDEX2(7,0,8)]+=tmp132_1 + tmp155_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp518_1 + tmp519_1 + tmp520_1 + tmp521_1 + tmp522_1 + tmp523_1 + tmp74_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp100_1 + tmp102_1 + tmp103_1 + tmp122_1 + tmp123_1 + tmp131_1 + tmp133_1 + tmp136_1 + tmp142_1 + tmp146_1 + tmp26_1 + tmp273_1 + tmp279_1 + tmp280_1 + tmp309_1 + tmp311_1 + tmp315_1 + tmp318_1 + tmp358_1 + tmp472_1 + tmp475_1 + tmp524_1 + tmp525_1 + tmp74_1 + tmp75_1 + tmp84_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1;  
                                 EM_S[INDEX2(5,2,8)]+=tmp155_1 + tmp159_1 + tmp161_1 + tmp189_1 + tmp18_1 + tmp190_1 + tmp224_1 + tmp519_1 + tmp523_1 + tmp526_1 + tmp527_1 + tmp74_1;  
                                 EM_S[INDEX2(6,1,8)]+=tmp132_1 + tmp155_1 + tmp159_1 + tmp161_1 + tmp18_1 + tmp193_1 + tmp222_1 + tmp223_1 + tmp521_1 + tmp522_1 + tmp528_1 + tmp529_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp136_1 + tmp14_1 + tmp15_1 + tmp21_1 + tmp25_1 + tmp26_1 + tmp279_1 + tmp29_1 + tmp356_1 + tmp357_1 + tmp358_1 + tmp491_1 + tmp492_1 + tmp495_1 + tmp496_1 + tmp498_1 + tmp500_1 + tmp510_1 + tmp513_1 + tmp54_1 + tmp5_1 + tmp65_1 + tmp66_1 + tmp68_1 + tmp69_1 + tmp73_1 + tmp74_1 + tmp75_1 + tmp77_1 + tmp78_1;  
                                 EM_S[INDEX2(0,2,8)]+=tmp102_1 + tmp104_1 + tmp141_1 + tmp176_1 + tmp186_1 + tmp188_1 + tmp193_1 + tmp216_1 + tmp260_1 + tmp261_1 + tmp275_1 + tmp304_1 + tmp313_1 + tmp316_1 + tmp317_1 + tmp320_1 + tmp491_1 + tmp495_1 + tmp497_1 + tmp498_1 + tmp499_1 + tmp500_1 + tmp506_1 + tmp509_1 + tmp54_1 + tmp68_1 + tmp91_1 + tmp92_1 + tmp94_1 + tmp99_1;  
                                 EM_S[INDEX2(7,4,8)]+=tmp163_1 + tmp165_1 + tmp166_1 + tmp169_1 + tmp171_1 + tmp172_1 + tmp229_1 + tmp232_1 + tmp238_1 + tmp31_1 + tmp33_1 + tmp34_1 + tmp363_1 + tmp364_1 + tmp419_1 + tmp41_1 + tmp420_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp530_1 + tmp531_1;  
3613                                  EM_S[INDEX2(0,6,8)]+=tmp114_1 + tmp119_1 + tmp32_1 + tmp338_1 + tmp340_1 + tmp343_1 + tmp347_1 + tmp349_1 + tmp351_1 + tmp407_1 + tmp42_1 + tmp464_1 + tmp465_1 + tmp469_1 + tmp47_1 + tmp484_1 + tmp485_1 + tmp487_1 + tmp490_1 + tmp51_1 + tmp532_1 + tmp533_1;                                  EM_S[INDEX2(0,6,8)]+=tmp114_1 + tmp119_1 + tmp32_1 + tmp338_1 + tmp340_1 + tmp343_1 + tmp347_1 + tmp349_1 + tmp351_1 + tmp407_1 + tmp42_1 + tmp464_1 + tmp465_1 + tmp469_1 + tmp47_1 + tmp484_1 + tmp485_1 + tmp487_1 + tmp490_1 + tmp51_1 + tmp532_1 + tmp533_1;
3614                                  EM_S[INDEX2(6,2,8)]+=tmp145_1 + tmp158_1 + tmp173_1 + tmp175_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp183_1 + tmp184_1 + tmp19_1 + tmp213_1 + tmp217_1 + tmp219_1 + tmp221_1 + tmp2_1 + tmp303_1 + tmp309_1 + tmp311_1 + tmp315_1 + tmp318_1 + tmp319_1 + tmp321_1 + tmp323_1 + tmp325_1 + tmp326_1 + tmp358_1 + tmp493_1 + tmp494_1 + tmp524_1 + tmp525_1;                                  EM_S[INDEX2(1,6,8)]+=tmp132_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp159_1 + tmp161_1 + tmp189_1 + tmp18_1 + tmp190_1 + tmp191_1 + tmp192_1 + tmp193_1;
3615                                  EM_S[INDEX2(4,3,8)]+=tmp152_1 + tmp154_1 + tmp155_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp193_1 + tmp224_1 + tmp526_1 + tmp527_1 + tmp528_1 + tmp529_1;                                  EM_S[INDEX2(2,6,8)]+=tmp104_1 + tmp158_1 + tmp16_1 + tmp173_1 + tmp174_1 + tmp175_1 + tmp176_1 + tmp177_1 + tmp178_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp182_1 + tmp183_1 + tmp184_1 + tmp185_1 + tmp186_1 + tmp187_1 + tmp188_1 + tmp19_1 + tmp24_1 + tmp28_1 + tmp2_1 + tmp59_1 + tmp86_1 + tmp88_1 + tmp8_1 + tmp91_1 + tmp92_1 + tmp99_1;
3616                                    EM_S[INDEX2(3,6,8)]+=tmp229_1 + tmp231_1 + tmp233_1 + tmp238_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp250_1 + tmp251_1 + tmp252_1 + tmp254_1 + tmp345_1 + tmp353_1 + tmp361_1 + tmp362_1 + tmp363_1 + tmp364_1 + tmp365_1;
3617                                    EM_S[INDEX2(4,6,8)]+=tmp100_1 + tmp102_1 + tmp103_1 + tmp122_1 + tmp123_1 + tmp131_1 + tmp133_1 + tmp136_1 + tmp142_1 + tmp146_1 + tmp26_1 + tmp273_1 + tmp279_1 + tmp280_1 + tmp309_1 + tmp311_1 + tmp315_1 + tmp318_1 + tmp358_1 + tmp472_1 + tmp475_1 + tmp524_1 + tmp525_1 + tmp74_1 + tmp75_1 + tmp84_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1;
3618                                    EM_S[INDEX2(5,6,8)]+=tmp162_1 + tmp163_1 + tmp164_1 + tmp165_1 + tmp166_1 + tmp167_1 + tmp168_1 + tmp169_1 + tmp170_1 + tmp171_1 + tmp172_1 + tmp31_1 + tmp34_1 + tmp35_1 + tmp37_1 + tmp39_1 + tmp41_1 + tmp43_1 + tmp45_1 + tmp46_1 + tmp49_1 + tmp50_1;
3619                                    EM_S[INDEX2(6,6,8)]+=tmp249_1 + tmp255_1 + tmp284_1 + tmp335_1 + tmp33_1 + tmp341_1 + tmp366_1 + tmp375_1 + tmp378_1 + tmp381_1 + tmp384_1 + tmp392_1 + tmp431_1 + tmp433_1 + tmp435_1 + tmp44_1 + tmp450_1 + tmp451_1 + tmp455_1 + tmp456_1 + tmp457_1 + tmp458_1 + tmp459_1 + tmp460_1;
3620                                    EM_S[INDEX2(7,6,8)]+=tmp101_1 + tmp125_1 + tmp134_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp221_1 + tmp224_1 + tmp270_1 + tmp271_1 + tmp274_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp281_1 + tmp310_1 + tmp322_1 + tmp323_1 + tmp324_1 + tmp325_1 + tmp326_1 + tmp67_1 + tmp82_1 + tmp87_1 + tmp90_1 + tmp97_1 + tmp98_1;
3621                                    EM_S[INDEX2(0,7,8)]+=tmp132_1 + tmp152_1 + tmp153_1 + tmp154_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp74_1;
3622                                  EM_S[INDEX2(1,7,8)]+=tmp165_1 + tmp166_1 + tmp169_1 + tmp171_1 + tmp228_1 + tmp239_1 + tmp245_1 + tmp248_1 + tmp250_1 + tmp251_1 + tmp297_1 + tmp299_1 + tmp403_1 + tmp404_1 + tmp405_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp410_1 + tmp489_1 + tmp534_1 + tmp535_1;                                  EM_S[INDEX2(1,7,8)]+=tmp165_1 + tmp166_1 + tmp169_1 + tmp171_1 + tmp228_1 + tmp239_1 + tmp245_1 + tmp248_1 + tmp250_1 + tmp251_1 + tmp297_1 + tmp299_1 + tmp403_1 + tmp404_1 + tmp405_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp410_1 + tmp489_1 + tmp534_1 + tmp535_1;
3623                                  EM_S[INDEX2(0,5,8)]+=tmp118_1 + tmp120_1 + tmp242_1 + tmp248_1 + tmp250_1 + tmp253_1 + tmp334_1 + tmp339_1 + tmp35_1 + tmp37_1 + tmp39_1 + tmp403_1 + tmp410_1 + tmp414_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp421_1 + tmp422_1 + tmp50_1 + tmp536_1 + tmp537_1;                                  EM_S[INDEX2(2,7,8)]+=tmp229_1 + tmp231_1 + tmp233_1 + tmp238_1 + tmp241_1 + tmp242_1 + tmp246_1 + tmp247_1 + tmp249_1 + tmp252_1 + tmp255_1 + tmp343_1 + tmp346_1 + tmp347_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp363_1 + tmp364_1 + tmp438_1 + tmp439_1 + tmp440_1;
3624                                  EM_S[INDEX2(3,4,8)]+=tmp155_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp191_1 + tmp192_1 + tmp193_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp518_1 + tmp520_1;                                  EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp12_1 + tmp139_1 + tmp13_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp20_1 + tmp210_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp55_1 + tmp62_1 + tmp64_1 + tmp72_1 + tmp79_1 + tmp80_1 + tmp81_1;
3625                                  EM_S[INDEX2(2,4,8)]+=tmp114_1 + tmp119_1 + tmp240_1 + tmp248_1 + tmp250_1 + tmp254_1 + tmp32_1 + tmp407_1 + tmp411_1 + tmp416_1 + tmp421_1 + tmp42_1 + tmp450_1 + tmp451_1 + tmp47_1 + tmp484_1 + tmp485_1 + tmp487_1 + tmp490_1 + tmp51_1 + tmp538_1 + tmp539_1;                                  EM_S[INDEX2(4,7,8)]+=tmp30_1 + tmp31_1 + tmp32_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp36_1 + tmp37_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp49_1 + tmp50_1 + tmp51_1;
3626                                    EM_S[INDEX2(5,7,8)]+=tmp101_1 + tmp10_1 + tmp11_1 + tmp14_1 + tmp15_1 + tmp193_1 + tmp21_1 + tmp25_1 + tmp310_1 + tmp312_1 + tmp317_1 + tmp319_1 + tmp322_1 + tmp324_1 + tmp355_1 + tmp360_1 + tmp397_1 + tmp398_1 + tmp399_1 + tmp400_1 + tmp401_1 + tmp402_1 + tmp66_1 + tmp77_1 + tmp82_1 + tmp84_1 + tmp87_1 + tmp95_1 + tmp97_1 + tmp9_1;
3627                                    EM_S[INDEX2(6,7,8)]+=tmp122_1 + tmp125_1 + tmp131_1 + tmp134_1 + tmp142_1 + tmp146_1 + tmp16_1 + tmp174_1 + tmp182_1 + tmp187_1 + tmp224_1 + tmp22_1 + tmp24_1 + tmp269_1 + tmp270_1 + tmp271_1 + tmp272_1 + tmp273_1 + tmp274_1 + tmp275_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp279_1 + tmp280_1 + tmp281_1 + tmp28_1 + tmp6_1 + tmp7_1 + tmp8_1;
3628                                    EM_S[INDEX2(7,7,8)]+=tmp162_1 + tmp170_1 + tmp282_1 + tmp292_1 + tmp301_1 + tmp345_1 + tmp353_1 + tmp369_1 + tmp381_1 + tmp382_1 + tmp383_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1 + tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp396_1;
3629                              } else { // constant data                              } else { // constant data
3630                                  const double A_00 = A_p[INDEX2(0,0,3)];                                  const double A_00 = A_p[INDEX2(0,0,3)];
3631                                  const double A_01 = A_p[INDEX2(0,1,3)];                                  const double A_01 = A_p[INDEX2(0,1,3)];
# Line 3413  void Brick::assemblePDESingle(Paso_Syste Line 3693  void Brick::assemblePDESingle(Paso_Syste
3693                                  const double tmp20_1 = A_12*w66;                                  const double tmp20_1 = A_12*w66;
3694                                  const double tmp1_1 = A_12*w64;                                  const double tmp1_1 = A_12*w64;
3695                                  const double tmp24_1 = A_20*w62;                                  const double tmp24_1 = A_20*w62;
3696                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;                                  EM_S[INDEX2(0,0,8)]+=tmp35_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1 + tmp52_1;
3697                                  EM_S[INDEX2(4,7,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp8_1 + tmp9_1;                                  EM_S[INDEX2(1,0,8)]+=tmp21_1 + tmp25_1 + tmp26_1 + tmp28_1 + tmp37_1 + tmp3_1 + tmp4_1 + tmp6_1;
3698                                  EM_S[INDEX2(1,3,8)]+=tmp0_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1;                                  EM_S[INDEX2(2,0,8)]+=tmp0_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp22_1 + tmp36_1 + tmp5_1;
                                 EM_S[INDEX2(6,4,8)]+=tmp0_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1;  
3699                                  EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp8_1 + tmp9_1;                                  EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp8_1 + tmp9_1;
                                 EM_S[INDEX2(5,4,8)]+=tmp21_1 + tmp23_1 + tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp6_1;  
                                 EM_S[INDEX2(0,7,8)]+=tmp16_1 + tmp27_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1;  
                                 EM_S[INDEX2(5,6,8)]+=tmp11_1 + tmp14_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp8_1 + tmp9_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp30_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;  
                                 EM_S[INDEX2(1,6,8)]+=tmp27_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp36_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp30_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;  
                                 EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp23_1 + tmp24_1 + tmp2_1 + tmp6_1 + tmp7_1;  
                                 EM_S[INDEX2(2,5,8)]+=tmp16_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp37_1;  
                                 EM_S[INDEX2(0,3,8)]+=tmp11_1 + tmp13_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp38_1 + tmp39_1 + tmp8_1;  
                                 EM_S[INDEX2(7,2,8)]+=tmp11_1 + tmp14_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp9_1;  
3700                                  EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp23_1 + tmp24_1 + tmp2_1 + tmp6_1 + tmp7_1;                                  EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp23_1 + tmp24_1 + tmp2_1 + tmp6_1 + tmp7_1;
3701                                    EM_S[INDEX2(5,0,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp49_1 + tmp50_1;
3702                                    EM_S[INDEX2(6,0,8)]+=tmp33_1 + tmp34_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp45_1 + tmp53_1 + tmp8_1;
3703                                    EM_S[INDEX2(7,0,8)]+=tmp16_1 + tmp27_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1;
3704                                    EM_S[INDEX2(0,1,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp24_1 + tmp26_1 + tmp37_1 + tmp6_1;
3705                                    EM_S[INDEX2(1,1,8)]+=tmp13_1 + tmp43_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp52_1;
3706                                    EM_S[INDEX2(2,1,8)]+=tmp11_1 + tmp14_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp8_1 + tmp9_1;
3707                                    EM_S[INDEX2(3,1,8)]+=tmp0_1 + tmp16_1 + tmp18_1 + tmp1_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp5_1;
3708                                    EM_S[INDEX2(4,1,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp44_1 + tmp51_1;
3709                                    EM_S[INDEX2(5,1,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp30_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;
3710                                    EM_S[INDEX2(6,1,8)]+=tmp27_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp36_1;
3711                                    EM_S[INDEX2(7,1,8)]+=tmp10_1 + tmp12_1 + tmp42_1 + tmp45_1 + tmp49_1 + tmp50_1 + tmp53_1 + tmp8_1;
3712                                    EM_S[INDEX2(0,2,8)]+=tmp0_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp36_1;
3713                                  EM_S[INDEX2(1,2,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp15_1 + tmp35_1 + tmp38_1 + tmp39_1 + tmp8_1;                                  EM_S[INDEX2(1,2,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp15_1 + tmp35_1 + tmp38_1 + tmp39_1 + tmp8_1;
3714                                  EM_S[INDEX2(6,7,8)]+=tmp21_1 + tmp25_1 + tmp26_1 + tmp28_1 + tmp37_1 + tmp3_1 + tmp4_1 + tmp6_1;                                  EM_S[INDEX2(2,2,8)]+=tmp13_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1;
3715                                    EM_S[INDEX2(3,2,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp26_1 + tmp27_1 + tmp3_1 + tmp4_1 + tmp6_1;
3716                                    EM_S[INDEX2(4,2,8)]+=tmp33_1 + tmp34_1 + tmp42_1 + tmp49_1 + tmp50_1 + tmp52_1 + tmp53_1 + tmp8_1;
3717                                    EM_S[INDEX2(5,2,8)]+=tmp16_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp37_1;
3718                                    EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp23_1 + tmp24_1 + tmp30_1 + tmp5_1 + tmp6_1 + tmp7_1;
3719                                    EM_S[INDEX2(7,2,8)]+=tmp11_1 + tmp14_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp9_1;
3720                                    EM_S[INDEX2(0,3,8)]+=tmp11_1 + tmp13_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp38_1 + tmp39_1 + tmp8_1;
3721                                    EM_S[INDEX2(1,3,8)]+=tmp0_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1;
3722                                    EM_S[INDEX2(2,3,8)]+=tmp21_1 + tmp23_1 + tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp6_1;
3723                                  EM_S[INDEX2(3,3,8)]+=tmp35_1 + tmp43_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1;                                  EM_S[INDEX2(3,3,8)]+=tmp35_1 + tmp43_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1;
3724                                  EM_S[INDEX2(2,0,8)]+=tmp0_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp22_1 + tmp36_1 + tmp5_1;                                  EM_S[INDEX2(4,3,8)]+=tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp36_1 + tmp37_1;
3725                                  EM_S[INDEX2(7,6,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp24_1 + tmp26_1 + tmp37_1 + tmp6_1;                                  EM_S[INDEX2(5,3,8)]+=tmp10_1 + tmp12_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp52_1 + tmp53_1 + tmp8_1;
                                 EM_S[INDEX2(4,4,8)]+=tmp35_1 + tmp43_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1;  
3726                                  EM_S[INDEX2(6,3,8)]+=tmp11_1 + tmp14_1 + tmp42_1 + tmp44_1 + tmp49_1 + tmp50_1 + tmp51_1 + tmp9_1;                                  EM_S[INDEX2(6,3,8)]+=tmp11_1 + tmp14_1 + tmp42_1 + tmp44_1 + tmp49_1 + tmp50_1 + tmp51_1 + tmp9_1;
3727                                    EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;
3728                                    EM_S[INDEX2(0,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;
3729                                    EM_S[INDEX2(1,4,8)]+=tmp11_1 + tmp14_1 + tmp42_1 + tmp44_1 + tmp49_1 + tmp50_1 + tmp51_1 + tmp9_1;
3730                                    EM_S[INDEX2(2,4,8)]+=tmp10_1 + tmp12_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp52_1 + tmp53_1 + tmp8_1;
3731                                    EM_S[INDEX2(3,4,8)]+=tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp36_1 + tmp37_1;
3732                                    EM_S[INDEX2(4,4,8)]+=tmp35_1 + tmp43_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1;
3733                                    EM_S[INDEX2(5,4,8)]+=tmp21_1 + tmp23_1 + tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp6_1;
3734                                    EM_S[INDEX2(6,4,8)]+=tmp0_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1;
3735                                    EM_S[INDEX2(7,4,8)]+=tmp11_1 + tmp13_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp38_1 + tmp39_1 + tmp8_1;
3736                                    EM_S[INDEX2(0,5,8)]+=tmp11_1 + tmp14_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp9_1;
3737                                  EM_S[INDEX2(1,5,8)]+=tmp0_1 + tmp1_1 + tmp23_1 + tmp24_1 + tmp30_1 + tmp5_1 + tmp6_1 + tmp7_1;                                  EM_S[INDEX2(1,5,8)]+=tmp0_1 + tmp1_1 + tmp23_1 + tmp24_1 + tmp30_1 + tmp5_1 + tmp6_1 + tmp7_1;
3738                                  EM_S[INDEX2(3,6,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp44_1 + tmp51_1;                                  EM_S[INDEX2(2,5,8)]+=tmp16_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp37_1;
3739                                  EM_S[INDEX2(2,2,8)]+=tmp13_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1;                                  EM_S[INDEX2(3,5,8)]+=tmp33_1 + tmp34_1 + tmp42_1 + tmp49_1 + tmp50_1 + tmp52_1 + tmp53_1 + tmp8_1;
                                 EM_S[INDEX2(7,7,8)]+=tmp35_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1 + tmp52_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp0_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp22_1 + tmp36_1 + tmp5_1;  
                                 EM_S[INDEX2(5,3,8)]+=tmp10_1 + tmp12_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp52_1 + tmp53_1 + tmp8_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp44_1 + tmp51_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp13_1 + tmp43_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp52_1;  
                                 EM_S[INDEX2(2,7,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp49_1 + tmp50_1;  
                                 EM_S[INDEX2(3,2,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp26_1 + tmp27_1 + tmp3_1 + tmp4_1 + tmp6_1;  
                                 EM_S[INDEX2(0,0,8)]+=tmp35_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1 + tmp52_1;  
                                 EM_S[INDEX2(6,6,8)]+=tmp13_1 + tmp43_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp52_1;  
                                 EM_S[INDEX2(5,0,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp49_1 + tmp50_1;  
                                 EM_S[INDEX2(7,1,8)]+=tmp10_1 + tmp12_1 + tmp42_1 + tmp45_1 + tmp49_1 + tmp50_1 + tmp53_1 + tmp8_1;  
3740                                  EM_S[INDEX2(4,5,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp26_1 + tmp27_1 + tmp3_1 + tmp4_1 + tmp6_1;                                  EM_S[INDEX2(4,5,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp26_1 + tmp27_1 + tmp3_1 + tmp4_1 + tmp6_1;
                                 EM_S[INDEX2(0,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;  
3741                                  EM_S[INDEX2(5,5,8)]+=tmp13_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1;                                  EM_S[INDEX2(5,5,8)]+=tmp13_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1;
                                 EM_S[INDEX2(1,4,8)]+=tmp11_1 + tmp14_1 + tmp42_1 + tmp44_1 + tmp49_1 + tmp50_1 + tmp51_1 + tmp9_1;  
                                 EM_S[INDEX2(6,0,8)]+=tmp33_1 + tmp34_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp45_1 + tmp53_1 + tmp8_1;  
                                 EM_S[INDEX2(7,5,8)]+=tmp0_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp36_1;  
                                 EM_S[INDEX2(2,3,8)]+=tmp21_1 + tmp23_1 + tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp6_1;  
                                 EM_S[INDEX2(2,1,8)]+=tmp11_1 + tmp14_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp8_1 + tmp9_1;  
                                 EM_S[INDEX2(4,2,8)]+=tmp33_1 + tmp34_1 + tmp42_1 + tmp49_1 + tmp50_1 + tmp52_1 + tmp53_1 + tmp8_1;  
                                 EM_S[INDEX2(1,0,8)]+=tmp21_1 + tmp25_1 + tmp26_1 + tmp28_1 + tmp37_1 + tmp3_1 + tmp4_1 + tmp6_1;  
3742                                  EM_S[INDEX2(6,5,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp15_1 + tmp35_1 + tmp38_1 + tmp39_1 + tmp8_1;                                  EM_S[INDEX2(6,5,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp15_1 + tmp35_1 + tmp38_1 + tmp39_1 + tmp8_1;
3743                                  EM_S[INDEX2(3,5,8)]+=tmp33_1 + tmp34_1 + tmp42_1 + tmp49_1 + tmp50_1 + tmp52_1 + tmp53_1 + tmp8_1;                                  EM_S[INDEX2(7,5,8)]+=tmp0_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp36_1;
                                 EM_S[INDEX2(0,1,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp24_1 + tmp26_1 + tmp37_1 + tmp6_1;  
                                 EM_S[INDEX2(7,0,8)]+=tmp16_1 + tmp27_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp0_1 + tmp16_1 + tmp18_1 + tmp1_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp5_1;  
                                 EM_S[INDEX2(5,2,8)]+=tmp16_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp37_1;  
                                 EM_S[INDEX2(6,1,8)]+=tmp27_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp36_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp0_1 + tmp16_1 + tmp18_1 + tmp1_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp5_1;  
                                 EM_S[INDEX2(0,2,8)]+=tmp0_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp36_1;  
                                 EM_S[INDEX2(7,4,8)]+=tmp11_1 + tmp13_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp38_1 + tmp39_1 + tmp8_1;  
3744                                  EM_S[INDEX2(0,6,8)]+=tmp10_1 + tmp12_1 + tmp42_1 + tmp45_1 + tmp49_1 + tmp50_1 + tmp53_1 + tmp8_1;                                  EM_S[INDEX2(0,6,8)]+=tmp10_1 + tmp12_1 + tmp42_1 + tmp45_1 + tmp49_1 + tmp50_1 + tmp53_1 + tmp8_1;
3745                                  EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp23_1 + tmp24_1 + tmp30_1 + tmp5_1 + tmp6_1 + tmp7_1;                                  EM_S[INDEX2(1,6,8)]+=tmp27_1 + tmp29_1 + tmp2_1 + tmp31_1 + tmp32_1 + tmp36_1;
3746                                  EM_S[INDEX2(4,3,8)]+=tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp36_1 + tmp37_1;                                  EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp30_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;
3747                                    EM_S[INDEX2(3,6,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp44_1 + tmp51_1;
3748                                    EM_S[INDEX2(4,6,8)]+=tmp0_1 + tmp16_1 + tmp18_1 + tmp1_1 + tmp21_1 + tmp25_1 + tmp28_1 + tmp5_1;
3749                                    EM_S[INDEX2(5,6,8)]+=tmp11_1 + tmp14_1 + tmp15_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp8_1 + tmp9_1;
3750                                    EM_S[INDEX2(6,6,8)]+=tmp13_1 + tmp43_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp52_1;
3751                                    EM_S[INDEX2(7,6,8)]+=tmp19_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp24_1 + tmp26_1 + tmp37_1 + tmp6_1;
3752                                    EM_S[INDEX2(0,7,8)]+=tmp16_1 + tmp27_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1;
3753                                  EM_S[INDEX2(1,7,8)]+=tmp33_1 + tmp34_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp45_1 + tmp53_1 + tmp8_1;                                  EM_S[INDEX2(1,7,8)]+=tmp33_1 + tmp34_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp45_1 + tmp53_1 + tmp8_1;
3754                                  EM_S[INDEX2(0,5,8)]+=tmp11_1 + tmp14_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp9_1;                                  EM_S[INDEX2(2,7,8)]+=tmp11_1 + tmp38_1 + tmp39_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp49_1 + tmp50_1;
3755                                  EM_S[INDEX2(3,4,8)]+=tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp36_1 + tmp37_1;                                  EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp17_1 + tmp20_1 + tmp23_1 + tmp24_1 + tmp2_1 + tmp6_1 + tmp7_1;
3756                                  EM_S[INDEX2(2,4,8)]+=tmp10_1 + tmp12_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp52_1 + tmp53_1 + tmp8_1;                                  EM_S[INDEX2(4,7,8)]+=tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp8_1 + tmp9_1;
3757                                    EM_S[INDEX2(5,7,8)]+=tmp0_1 + tmp18_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp22_1 + tmp36_1 + tmp5_1;
3758                                    EM_S[INDEX2(6,7,8)]+=tmp21_1 + tmp25_1 + tmp26_1 + tmp28_1 + tmp37_1 + tmp3_1 + tmp4_1 + tmp6_1;
3759                                    EM_S[INDEX2(7,7,8)]+=tmp35_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1 + tmp52_1;
3760                              }                              }
3761                          }                          }
3762                          ///////////////                          ///////////////
# Line 4008  void Brick::assemblePDESingle(Paso_Syste Line 4288  void Brick::assemblePDESingle(Paso_Syste
4288                                  const double tmp240_1 = B_1_0*w99;                                  const double tmp240_1 = B_1_0*w99;
4289                                  const double tmp160_1 = B_0_1*w104;                                  const double tmp160_1 = B_0_1*w104;
4290                                  const double tmp377_1 = B_2_5*w100;                                  const double tmp377_1 = B_2_5*w100;
4291                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                                  EM_S[INDEX2(0,0,8)]+=tmp175_1 + tmp178_1 + tmp324_1 + tmp325_1 + tmp326_1 + tmp327_1 + tmp328_1 + tmp329_1 + tmp330_1 + tmp331_1 + tmp332_1 + tmp333_1 + tmp334_1 + tmp335_1 + tmp336_1 + tmp337_1 + tmp338_1 + tmp339_1;
4292                                  EM_S[INDEX2(4,7,8)]+=tmp14_1 + tmp15_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1 + tmp23_1;                                  EM_S[INDEX2(1,0,8)]+=tmp200_1 + tmp202_1 + tmp410_1 + tmp411_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp421_1;
4293                                  EM_S[INDEX2(1,3,8)]+=tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp36_1 + tmp37_1;                                  EM_S[INDEX2(2,0,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp190_1 + tmp191_1 + tmp192_1 + tmp193_1 + tmp194_1 + tmp195_1 + tmp196_1 + tmp197_1 + tmp198_1 + tmp199_1;
                                 EM_S[INDEX2(6,4,8)]+=tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp49_1 + tmp50_1 + tmp51_1;  
4294                                  EM_S[INDEX2(3,0,8)]+=tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1;                                  EM_S[INDEX2(3,0,8)]+=tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1;
                                 EM_S[INDEX2(5,4,8)]+=tmp62_1 + tmp63_1 + tmp64_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp70_1 + tmp71_1 + tmp72_1 + tmp73_1 + tmp74_1 + tmp75_1;  
                                 EM_S[INDEX2(0,7,8)]+=tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;  
                                 EM_S[INDEX2(5,6,8)]+=tmp17_1 + tmp18_1 + tmp19_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp86_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp90_1 + tmp91_1 + tmp92_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1 + tmp97_1 + tmp98_1 + tmp99_1;  
                                 EM_S[INDEX2(1,6,8)]+=tmp100_1 + tmp101_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp102_1 + tmp103_1 + tmp104_1 + tmp105_1 + tmp106_1 + tmp107_1 + tmp108_1 + tmp109_1 + tmp110_1 + tmp111_1 + tmp112_1 + tmp113_1 + tmp114_1 + tmp115_1;  
                                 EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp10_1 + tmp116_1 + tmp117_1 + tmp118_1 + tmp119_1 + tmp11_1 + tmp120_1 + tmp121_1 + tmp12_1 + tmp1_1 + tmp4_1 + tmp7_1 + tmp8_1;  
                                 EM_S[INDEX2(2,5,8)]+=tmp122_1 + tmp123_1 + tmp76_1 + tmp77_1 + tmp80_1 + tmp81_1;  
                                 EM_S[INDEX2(0,3,8)]+=tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp55_1 + tmp58_1;  
                                 EM_S[INDEX2(7,2,8)]+=tmp132_1 + tmp133_1 + tmp134_1 + tmp135_1 + tmp136_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1;  
4295                                  EM_S[INDEX2(4,0,8)]+=tmp13_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp145_1 + tmp146_1 + tmp147_1 + tmp148_1 + tmp149_1 + tmp150_1 + tmp151_1 + tmp152_1 + tmp153_1 + tmp6_1;                                  EM_S[INDEX2(4,0,8)]+=tmp13_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp145_1 + tmp146_1 + tmp147_1 + tmp148_1 + tmp149_1 + tmp150_1 + tmp151_1 + tmp152_1 + tmp153_1 + tmp6_1;
4296                                    EM_S[INDEX2(5,0,8)]+=tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp298_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1;
4297                                    EM_S[INDEX2(6,0,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp396_1 + tmp397_1;
4298                                    EM_S[INDEX2(7,0,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1;
4299                                    EM_S[INDEX2(0,1,8)]+=tmp154_1 + tmp155_1 + tmp411_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp416_1 + tmp417_1 + tmp419_1 + tmp421_1 + tmp430_1 + tmp431_1 + tmp432_1 + tmp433_1;
4300                                    EM_S[INDEX2(1,1,8)]+=tmp211_1 + tmp212_1 + tmp244_1 + tmp246_1 + tmp252_1 + tmp254_1 + tmp300_1 + tmp301_1 + tmp302_1 + tmp303_1 + tmp304_1 + tmp305_1 + tmp306_1 + tmp307_1 + tmp308_1 + tmp309_1 + tmp310_1 + tmp311_1;
4301                                    EM_S[INDEX2(2,1,8)]+=tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp54_1 + tmp55_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp61_1;
4302                                    EM_S[INDEX2(3,1,8)]+=tmp24_1 + tmp26_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp34_1 + tmp35_1 + tmp440_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp46_1 + tmp48_1;
4303                                    EM_S[INDEX2(4,1,8)]+=tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp297_1 + tmp298_1 + tmp299_1;
4304                                    EM_S[INDEX2(5,1,8)]+=tmp102_1 + tmp103_1 + tmp104_1 + tmp105_1 + tmp106_1 + tmp107_1 + tmp108_1 + tmp109_1 + tmp110_1 + tmp111_1 + tmp112_1 + tmp113_1 + tmp114_1 + tmp115_1;
4305                                    EM_S[INDEX2(6,1,8)]+=tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1;
4306                                    EM_S[INDEX2(7,1,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp283_1 + tmp286_1 + tmp289_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1;
4307                                    EM_S[INDEX2(0,2,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp191_1 + tmp192_1 + tmp194_1 + tmp197_1 + tmp272_1 + tmp273_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp447_1;
4308                                  EM_S[INDEX2(1,2,8)]+=tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp52_1 + tmp53_1 + tmp55_1 + tmp56_1 + tmp58_1 + tmp60_1;                                  EM_S[INDEX2(1,2,8)]+=tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp52_1 + tmp53_1 + tmp55_1 + tmp56_1 + tmp58_1 + tmp60_1;
4309                                  EM_S[INDEX2(6,7,8)]+=tmp154_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp162_1 + tmp163_1 + tmp164_1 + tmp165_1 + tmp166_1 + tmp167_1;                                  EM_S[INDEX2(2,2,8)]+=tmp206_1 + tmp207_1 + tmp236_1 + tmp237_1 + tmp238_1 + tmp239_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp243_1 + tmp244_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp249_1 + tmp250_1 + tmp251_1;
4310                                    EM_S[INDEX2(3,2,8)]+=tmp312_1 + tmp313_1 + tmp314_1 + tmp315_1 + tmp316_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp321_1 + tmp322_1 + tmp323_1 + tmp62_1 + tmp64_1;
4311                                    EM_S[INDEX2(4,2,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp393_1 + tmp397_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1;
4312                                    EM_S[INDEX2(5,2,8)]+=tmp100_1 + tmp101_1 + tmp434_1 + tmp435_1 + tmp78_1 + tmp79_1;
4313                                    EM_S[INDEX2(6,2,8)]+=tmp109_1 + tmp112_1 + tmp452_1 + tmp453_1 + tmp454_1 + tmp455_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp91_1 + tmp94_1 + tmp95_1 + tmp97_1 + tmp99_1;
4314                                    EM_S[INDEX2(7,2,8)]+=tmp132_1 + tmp133_1 + tmp134_1 + tmp135_1 + tmp136_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1;
4315                                    EM_S[INDEX2(0,3,8)]+=tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp55_1 + tmp58_1;
4316                                    EM_S[INDEX2(1,3,8)]+=tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp36_1 + tmp37_1;
4317                                    EM_S[INDEX2(2,3,8)]+=tmp313_1 + tmp314_1 + tmp315_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp323_1 + tmp362_1 + tmp363_1 + tmp402_1 + tmp403_1 + tmp404_1 + tmp405_1;
4318                                  EM_S[INDEX2(3,3,8)]+=tmp168_1 + tmp169_1 + tmp170_1 + tmp171_1 + tmp172_1 + tmp173_1 + tmp174_1 + tmp175_1 + tmp176_1 + tmp177_1 + tmp178_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp182_1 + tmp183_1 + tmp184_1 + tmp185_1;                                  EM_S[INDEX2(3,3,8)]+=tmp168_1 + tmp169_1 + tmp170_1 + tmp171_1 + tmp172_1 + tmp173_1 + tmp174_1 + tmp175_1 + tmp176_1 + tmp177_1 + tmp178_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp182_1 + tmp183_1 + tmp184_1 + tmp185_1;
4319                                  EM_S[INDEX2(2,0,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp190_1 + tmp191_1 + tmp192_1 + tmp193_1 + tmp194_1 + tmp195_1 + tmp196_1 + tmp197_1 + tmp198_1 + tmp199_1;                                  EM_S[INDEX2(4,3,8)]+=tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1;
4320                                  EM_S[INDEX2(7,6,8)]+=tmp157_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp162_1 + tmp164_1 + tmp166_1 + tmp167_1 + tmp200_1 + tmp201_1 + tmp202_1 + tmp203_1 + tmp204_1 + tmp205_1;                                  EM_S[INDEX2(5,3,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp283_1 + tmp284_1 + tmp285_1 + tmp286_1 + tmp287_1 + tmp288_1 + tmp289_1;
                                 EM_S[INDEX2(4,4,8)]+=tmp206_1 + tmp207_1 + tmp208_1 + tmp209_1 + tmp210_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp222_1 + tmp223_1;  
4321                                  EM_S[INDEX2(6,3,8)]+=tmp134_1 + tmp135_1 + tmp136_1 + tmp138_1 + tmp140_1 + tmp141_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1;                                  EM_S[INDEX2(6,3,8)]+=tmp134_1 + tmp135_1 + tmp136_1 + tmp138_1 + tmp140_1 + tmp141_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1;
4322                                    EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
4323                                    EM_S[INDEX2(0,4,8)]+=tmp119_1 + tmp120_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp146_1 + tmp147_1 + tmp149_1 + tmp151_1 + tmp152_1 + tmp368_1 + tmp369_1 + tmp370_1 + tmp371_1;
4324                                    EM_S[INDEX2(1,4,8)]+=tmp294_1 + tmp295_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;
4325                                    EM_S[INDEX2(2,4,8)]+=tmp388_1 + tmp389_1 + tmp392_1 + tmp394_1 + tmp395_1 + tmp396_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;
4326                                    EM_S[INDEX2(3,4,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp80_1 + tmp81_1;
4327                                    EM_S[INDEX2(4,4,8)]+=tmp206_1 + tmp207_1 + tmp208_1 + tmp209_1 + tmp210_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp222_1 + tmp223_1;
4328                                    EM_S[INDEX2(5,4,8)]+=tmp62_1 + tmp63_1 + tmp64_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp70_1 + tmp71_1 + tmp72_1 + tmp73_1 + tmp74_1 + tmp75_1;
4329                                    EM_S[INDEX2(6,4,8)]+=tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp49_1 + tmp50_1 + tmp51_1;
4330                                    EM_S[INDEX2(7,4,8)]+=tmp19_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;
4331                                    EM_S[INDEX2(0,5,8)]+=tmp290_1 + tmp291_1 + tmp294_1 + tmp295_1 + tmp297_1 + tmp299_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;
4332                                  EM_S[INDEX2(1,5,8)]+=tmp102_1 + tmp103_1 + tmp106_1 + tmp107_1 + tmp110_1 + tmp113_1 + tmp114_1 + tmp115_1 + tmp228_1 + tmp229_1 + tmp230_1 + tmp231_1 + tmp86_1 + tmp96_1;                                  EM_S[INDEX2(1,5,8)]+=tmp102_1 + tmp103_1 + tmp106_1 + tmp107_1 + tmp110_1 + tmp113_1 + tmp114_1 + tmp115_1 + tmp228_1 + tmp229_1 + tmp230_1 + tmp231_1 + tmp86_1 + tmp96_1;
4333                                  EM_S[INDEX2(3,6,8)]+=tmp132_1 + tmp133_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;                                  EM_S[INDEX2(2,5,8)]+=tmp122_1 + tmp123_1 + tmp76_1 + tmp77_1 + tmp80_1 + tmp81_1;
4334                                  EM_S[INDEX2(2,2,8)]+=tmp206_1 + tmp207_1 + tmp236_1 + tmp237_1 + tmp238_1 + tmp239_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp243_1 + tmp244_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp249_1 + tmp250_1 + tmp251_1;                                  EM_S[INDEX2(3,5,8)]+=tmp280_1 + tmp281_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;
                                 EM_S[INDEX2(7,7,8)]+=tmp215_1 + tmp222_1 + tmp247_1 + tmp250_1 + tmp252_1 + tmp253_1 + tmp254_1 + tmp255_1 + tmp256_1 + tmp257_1 + tmp258_1 + tmp259_1 + tmp260_1 + tmp261_1 + tmp262_1 + tmp263_1 + tmp264_1 + tmp265_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp266_1 + tmp267_1 + tmp268_1 + tmp269_1 + tmp270_1 + tmp271_1 + tmp272_1 + tmp273_1 + tmp274_1 + tmp275_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp279_1;  
                                 EM_S[INDEX2(5,3,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp283_1 + tmp284_1 + tmp285_1 + tmp286_1 + tmp287_1 + tmp288_1 + tmp289_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp297_1 + tmp298_1 + tmp299_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp211_1 + tmp212_1 + tmp244_1 + tmp246_1 + tmp252_1 + tmp254_1 + tmp300_1 + tmp301_1 + tmp302_1 + tmp303_1 + tmp304_1 + tmp305_1 + tmp306_1 + tmp307_1 + tmp308_1 + tmp309_1 + tmp310_1 + tmp311_1;  
                                 EM_S[INDEX2(2,7,8)]+=tmp138_1 + tmp140_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;  
                                 EM_S[INDEX2(3,2,8)]+=tmp312_1 + tmp313_1 + tmp314_1 + tmp315_1 + tmp316_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp321_1 + tmp322_1 + tmp323_1 + tmp62_1 + tmp64_1;  
                                 EM_S[INDEX2(0,0,8)]+=tmp175_1 + tmp178_1 + tmp324_1 + tmp325_1 + tmp326_1 + tmp327_1 + tmp328_1 + tmp329_1 + tmp330_1 + tmp331_1 + tmp332_1 + tmp333_1 + tmp334_1 + tmp335_1 + tmp336_1 + tmp337_1 + tmp338_1 + tmp339_1;  
                                 EM_S[INDEX2(6,6,8)]+=tmp179_1 + tmp184_1 + tmp325_1 + tmp326_1 + tmp340_1 + tmp341_1 + tmp342_1 + tmp343_1 + tmp344_1 + tmp345_1 + tmp346_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp352_1 + tmp353_1;  
                                 EM_S[INDEX2(5,0,8)]+=tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp298_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1;  
                                 EM_S[INDEX2(7,1,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp283_1 + tmp286_1 + tmp289_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1;  
4335                                  EM_S[INDEX2(4,5,8)]+=tmp362_1 + tmp363_1 + tmp364_1 + tmp365_1 + tmp366_1 + tmp367_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp71_1 + tmp72_1 + tmp75_1;                                  EM_S[INDEX2(4,5,8)]+=tmp362_1 + tmp363_1 + tmp364_1 + tmp365_1 + tmp366_1 + tmp367_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp71_1 + tmp72_1 + tmp75_1;
                                 EM_S[INDEX2(0,4,8)]+=tmp119_1 + tmp120_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp146_1 + tmp147_1 + tmp149_1 + tmp151_1 + tmp152_1 + tmp368_1 + tmp369_1 + tmp370_1 + tmp371_1;  
4336                                  EM_S[INDEX2(5,5,8)]+=tmp168_1 + tmp170_1 + tmp330_1 + tmp335_1 + tmp345_1 + tmp352_1 + tmp372_1 + tmp373_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp377_1 + tmp378_1 + tmp379_1 + tmp380_1 + tmp381_1 + tmp382_1 + tmp383_1;                                  EM_S[INDEX2(5,5,8)]+=tmp168_1 + tmp170_1 + tmp330_1 + tmp335_1 + tmp345_1 + tmp352_1 + tmp372_1 + tmp373_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp377_1 + tmp378_1 + tmp379_1 + tmp380_1 + tmp381_1 + tmp382_1 + tmp383_1;
                                 EM_S[INDEX2(1,4,8)]+=tmp294_1 + tmp295_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;  
                                 EM_S[INDEX2(6,0,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp396_1 + tmp397_1;  
                                 EM_S[INDEX2(7,5,8)]+=tmp195_1 + tmp198_1 + tmp266_1 + tmp268_1 + tmp269_1 + tmp271_1 + tmp274_1 + tmp275_1 + tmp278_1 + tmp279_1 + tmp398_1 + tmp399_1 + tmp400_1 + tmp401_1;  
                                 EM_S[INDEX2(2,3,8)]+=tmp313_1 + tmp314_1 + tmp315_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp323_1 + tmp362_1 + tmp363_1 + tmp402_1 + tmp403_1 + tmp404_1 + tmp405_1;  
                                 EM_S[INDEX2(2,1,8)]+=tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp54_1 + tmp55_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp61_1;  
                                 EM_S[INDEX2(4,2,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp393_1 + tmp397_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1;  
                                 EM_S[INDEX2(1,0,8)]+=tmp200_1 + tmp202_1 + tmp410_1 + tmp411_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp421_1;  
4337                                  EM_S[INDEX2(6,5,8)]+=tmp14_1 + tmp15_1 + tmp16_1 + tmp19_1 + tmp20_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1;                                  EM_S[INDEX2(6,5,8)]+=tmp14_1 + tmp15_1 + tmp16_1 + tmp19_1 + tmp20_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1;
4338                                  EM_S[INDEX2(3,5,8)]+=tmp280_1 + tmp281_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;                                  EM_S[INDEX2(7,5,8)]+=tmp195_1 + tmp198_1 + tmp266_1 + tmp268_1 + tmp269_1 + tmp271_1 + tmp274_1 + tmp275_1 + tmp278_1 + tmp279_1 + tmp398_1 + tmp399_1 + tmp400_1 + tmp401_1;
                                 EM_S[INDEX2(0,1,8)]+=tmp154_1 + tmp155_1 + tmp411_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp416_1 + tmp417_1 + tmp419_1 + tmp421_1 + tmp430_1 + tmp431_1 + tmp432_1 + tmp433_1;  
                                 EM_S[INDEX2(7,0,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp27_1 + tmp28_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp436_1 + tmp437_1 + tmp438_1 + tmp439_1 + tmp43_1 + tmp44_1 + tmp50_1 + tmp51_1;  
                                 EM_S[INDEX2(5,2,8)]+=tmp100_1 + tmp101_1 + tmp434_1 + tmp435_1 + tmp78_1 + tmp79_1;  
                                 EM_S[INDEX2(6,1,8)]+=tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp24_1 + tmp26_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp34_1 + tmp35_1 + tmp440_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp46_1 + tmp48_1;  
                                 EM_S[INDEX2(0,2,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp191_1 + tmp192_1 + tmp194_1 + tmp197_1 + tmp272_1 + tmp273_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp447_1;  
                                 EM_S[INDEX2(7,4,8)]+=tmp19_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;  
4339                                  EM_S[INDEX2(0,6,8)]+=tmp388_1 + tmp389_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;                                  EM_S[INDEX2(0,6,8)]+=tmp388_1 + tmp389_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;
4340                                  EM_S[INDEX2(6,2,8)]+=tmp109_1 + tmp112_1 + tmp452_1 + tmp453_1 + tmp454_1 + tmp455_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp91_1 + tmp94_1 + tmp95_1 + tmp97_1 + tmp99_1;                                  EM_S[INDEX2(1,6,8)]+=tmp100_1 + tmp101_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;
4341                                  EM_S[INDEX2(4,3,8)]+=tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1;                                  EM_S[INDEX2(2,6,8)]+=tmp86_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp90_1 + tmp91_1 + tmp92_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1 + tmp97_1 + tmp98_1 + tmp99_1;
4342                                    EM_S[INDEX2(3,6,8)]+=tmp132_1 + tmp133_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;
4343                                    EM_S[INDEX2(4,6,8)]+=tmp27_1 + tmp28_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp436_1 + tmp437_1 + tmp438_1 + tmp439_1 + tmp43_1 + tmp44_1 + tmp50_1 + tmp51_1;
4344                                    EM_S[INDEX2(5,6,8)]+=tmp17_1 + tmp18_1 + tmp19_1 + tmp21_1 + tmp22_1 + tmp23_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;
4345                                    EM_S[INDEX2(6,6,8)]+=tmp179_1 + tmp184_1 + tmp325_1 + tmp326_1 + tmp340_1 + tmp341_1 + tmp342_1 + tmp343_1 + tmp344_1 + tmp345_1 + tmp346_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp352_1 + tmp353_1;
4346                                    EM_S[INDEX2(7,6,8)]+=tmp157_1 + tmp158_1 + tmp159_1 + tmp161_1 + tmp162_1 + tmp164_1 + tmp166_1 + tmp167_1 + tmp200_1 + tmp201_1 + tmp202_1 + tmp203_1 + tmp204_1 + tmp205_1;
4347                                    EM_S[INDEX2(0,7,8)]+=tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;
4348                                  EM_S[INDEX2(1,7,8)]+=tmp280_1 + tmp281_1 + tmp284_1 + tmp285_1 + tmp287_1 + tmp288_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;                                  EM_S[INDEX2(1,7,8)]+=tmp280_1 + tmp281_1 + tmp284_1 + tmp285_1 + tmp287_1 + tmp288_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;
4349                                  EM_S[INDEX2(0,5,8)]+=tmp290_1 + tmp291_1 + tmp294_1 + tmp295_1 + tmp297_1 + tmp299_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;                                  EM_S[INDEX2(2,7,8)]+=tmp138_1 + tmp140_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;
4350                                  EM_S[INDEX2(3,4,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp80_1 + tmp81_1;                                  EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp10_1 + tmp116_1 + tmp117_1 + tmp118_1 + tmp119_1 + tmp11_1 + tmp120_1 + tmp121_1 + tmp12_1 + tmp1_1 + tmp4_1 + tmp7_1 + tmp8_1;
4351                                  EM_S[INDEX2(2,4,8)]+=tmp388_1 + tmp389_1 + tmp392_1 + tmp394_1 + tmp395_1 + tmp396_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;                                  EM_S[INDEX2(4,7,8)]+=tmp14_1 + tmp15_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1 + tmp23_1;
4352                                    EM_S[INDEX2(5,7,8)]+=tmp266_1 + tmp267_1 + tmp268_1 + tmp269_1 + tmp270_1 + tmp271_1 + tmp272_1 + tmp273_1 + tmp274_1 + tmp275_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp279_1;
4353                                    EM_S[INDEX2(6,7,8)]+=tmp154_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp162_1 + tmp163_1 + tmp164_1 + tmp165_1 + tmp166_1 + tmp167_1;
4354                                    EM_S[INDEX2(7,7,8)]+=tmp215_1 + tmp222_1 + tmp247_1 + tmp250_1 + tmp252_1 + tmp253_1 + tmp254_1 + tmp255_1 + tmp256_1 + tmp257_1 + tmp258_1 + tmp259_1 + tmp260_1 + tmp261_1 + tmp262_1 + tmp263_1 + tmp264_1 + tmp265_1;
4355                              } else { // constant data                              } else { // constant data
4356                                  const double B_0 = B_p[0];                                  const double B_0 = B_p[0];
4357                                  const double B_1 = B_p[1];                                  const double B_1 = B_p[1];
# Line 4094  void Brick::assemblePDESingle(Paso_Syste Line 4374  void Brick::assemblePDESingle(Paso_Syste
4374                                  const double tmp0_1 = B_2*w128;                                  const double tmp0_1 = B_2*w128;
4375                                  const double tmp16_1 = B_1*w142;                                  const double tmp16_1 = B_1*w142;
4376                                  const double tmp11_1 = B_0*w137;                                  const double tmp11_1 = B_0*w137;
4377                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                                  EM_S[INDEX2(0,0,8)]+=tmp14_1 + tmp17_1 + tmp6_1;
4378                                  EM_S[INDEX2(4,7,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                                  EM_S[INDEX2(1,0,8)]+=tmp11_1 + tmp4_1 + tmp7_1;
4379                                  EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp6_1 + tmp7_1;                                  EM_S[INDEX2(2,0,8)]+=tmp3_1 + tmp7_1 + tmp9_1;
                                 EM_S[INDEX2(6,4,8)]+=tmp3_1 + tmp8_1 + tmp9_1;  
4380                                  EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp1_1 + tmp2_1;                                  EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp1_1 + tmp2_1;
                                 EM_S[INDEX2(5,4,8)]+=tmp11_1 + tmp4_1 + tmp8_1;  
                                 EM_S[INDEX2(0,7,8)]+=tmp10_1 + tmp12_1 + tmp13_1;  
                                 EM_S[INDEX2(5,6,8)]+=tmp2_1 + tmp4_1 + tmp5_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp14_1 + tmp1_1 + tmp3_1;  
                                 EM_S[INDEX2(1,6,8)]+=tmp10_1 + tmp13_1 + tmp15_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp0_1 + tmp2_1 + tmp4_1;  
                                 EM_S[INDEX2(3,7,8)]+=tmp14_1 + tmp1_1 + tmp2_1;  
                                 EM_S[INDEX2(2,5,8)]+=tmp10_1 + tmp12_1 + tmp16_1;  
                                 EM_S[INDEX2(0,3,8)]+=tmp10_1 + tmp3_1 + tmp4_1;  
                                 EM_S[INDEX2(7,2,8)]+=tmp16_1 + tmp2_1 + tmp8_1;  
4381                                  EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp3_1 + tmp4_1;                                  EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp3_1 + tmp4_1;
4382                                    EM_S[INDEX2(5,0,8)]+=tmp13_1 + tmp2_1 + tmp8_1;
4383                                    EM_S[INDEX2(6,0,8)]+=tmp12_1 + tmp1_1 + tmp8_1;
4384                                    EM_S[INDEX2(7,0,8)]+=tmp15_1 + tmp16_1 + tmp5_1;
4385                                    EM_S[INDEX2(0,1,8)]+=tmp17_1 + tmp4_1 + tmp7_1;
4386                                    EM_S[INDEX2(1,1,8)]+=tmp11_1 + tmp14_1 + tmp6_1;
4387                                    EM_S[INDEX2(2,1,8)]+=tmp10_1 + tmp1_1 + tmp3_1;
4388                                    EM_S[INDEX2(3,1,8)]+=tmp2_1 + tmp7_1 + tmp9_1;
4389                                    EM_S[INDEX2(4,1,8)]+=tmp13_1 + tmp3_1 + tmp8_1;
4390                                    EM_S[INDEX2(5,1,8)]+=tmp0_1 + tmp2_1 + tmp4_1;
4391                                    EM_S[INDEX2(6,1,8)]+=tmp12_1 + tmp16_1 + tmp5_1;
4392                                    EM_S[INDEX2(7,1,8)]+=tmp15_1 + tmp1_1 + tmp8_1;
4393                                    EM_S[INDEX2(0,2,8)]+=tmp3_1 + tmp6_1 + tmp7_1;
4394                                  EM_S[INDEX2(1,2,8)]+=tmp10_1 + tmp2_1 + tmp4_1;                                  EM_S[INDEX2(1,2,8)]+=tmp10_1 + tmp2_1 + tmp4_1;
4395                                  EM_S[INDEX2(6,7,8)]+=tmp17_1 + tmp1_1 + tmp8_1;                                  EM_S[INDEX2(2,2,8)]+=tmp14_1 + tmp17_1 + tmp9_1;
4396                                    EM_S[INDEX2(3,2,8)]+=tmp11_1 + tmp1_1 + tmp7_1;
4397                                    EM_S[INDEX2(4,2,8)]+=tmp12_1 + tmp4_1 + tmp8_1;
4398                                    EM_S[INDEX2(5,2,8)]+=tmp13_1 + tmp15_1 + tmp5_1;
4399                                    EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp3_1;
4400                                    EM_S[INDEX2(7,2,8)]+=tmp16_1 + tmp2_1 + tmp8_1;
4401                                    EM_S[INDEX2(0,3,8)]+=tmp10_1 + tmp3_1 + tmp4_1;
4402                                    EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp6_1 + tmp7_1;
4403                                    EM_S[INDEX2(2,3,8)]+=tmp17_1 + tmp1_1 + tmp7_1;
4404                                  EM_S[INDEX2(3,3,8)]+=tmp11_1 + tmp14_1 + tmp9_1;                                  EM_S[INDEX2(3,3,8)]+=tmp11_1 + tmp14_1 + tmp9_1;
4405                                  EM_S[INDEX2(2,0,8)]+=tmp3_1 + tmp7_1 + tmp9_1;                                  EM_S[INDEX2(4,3,8)]+=tmp12_1 + tmp13_1 + tmp5_1;
4406                                  EM_S[INDEX2(7,6,8)]+=tmp11_1 + tmp1_1 + tmp8_1;                                  EM_S[INDEX2(5,3,8)]+=tmp15_1 + tmp4_1 + tmp8_1;
                                 EM_S[INDEX2(4,4,8)]+=tmp0_1 + tmp17_1 + tmp6_1;  
4407                                  EM_S[INDEX2(6,3,8)]+=tmp16_1 + tmp3_1 + tmp8_1;                                  EM_S[INDEX2(6,3,8)]+=tmp16_1 + tmp3_1 + tmp8_1;
4408                                    EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
4409                                    EM_S[INDEX2(0,4,8)]+=tmp14_1 + tmp3_1 + tmp4_1;
4410                                    EM_S[INDEX2(1,4,8)]+=tmp13_1 + tmp2_1 + tmp7_1;
4411                                    EM_S[INDEX2(2,4,8)]+=tmp12_1 + tmp1_1 + tmp7_1;
4412                                    EM_S[INDEX2(3,4,8)]+=tmp10_1 + tmp15_1 + tmp16_1;
4413                                    EM_S[INDEX2(4,4,8)]+=tmp0_1 + tmp17_1 + tmp6_1;
4414                                    EM_S[INDEX2(5,4,8)]+=tmp11_1 + tmp4_1 + tmp8_1;
4415                                    EM_S[INDEX2(6,4,8)]+=tmp3_1 + tmp8_1 + tmp9_1;
4416                                    EM_S[INDEX2(7,4,8)]+=tmp1_1 + tmp2_1 + tmp5_1;
4417                                    EM_S[INDEX2(0,5,8)]+=tmp13_1 + tmp3_1 + tmp7_1;
4418                                  EM_S[INDEX2(1,5,8)]+=tmp14_1 + tmp2_1 + tmp4_1;                                  EM_S[INDEX2(1,5,8)]+=tmp14_1 + tmp2_1 + tmp4_1;
4419                                  EM_S[INDEX2(3,6,8)]+=tmp16_1 + tmp2_1 + tmp7_1;                                  EM_S[INDEX2(2,5,8)]+=tmp10_1 + tmp12_1 + tmp16_1;
4420                                  EM_S[INDEX2(2,2,8)]+=tmp14_1 + tmp17_1 + tmp9_1;                                  EM_S[INDEX2(3,5,8)]+=tmp15_1 + tmp1_1 + tmp7_1;
                                 EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp11_1 + tmp9_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp2_1 + tmp6_1 + tmp8_1;  
                                 EM_S[INDEX2(5,3,8)]+=tmp15_1 + tmp4_1 + tmp8_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp13_1 + tmp3_1 + tmp8_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp11_1 + tmp14_1 + tmp6_1;  
                                 EM_S[INDEX2(2,7,8)]+=tmp16_1 + tmp3_1 + tmp7_1;  
                                 EM_S[INDEX2(3,2,8)]+=tmp11_1 + tmp1_1 + tmp7_1;  
                                 EM_S[INDEX2(0,0,8)]+=tmp14_1 + tmp17_1 + tmp6_1;  
                                 EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp17_1 + tmp9_1;  
                                 EM_S[INDEX2(5,0,8)]+=tmp13_1 + tmp2_1 + tmp8_1;  
                                 EM_S[INDEX2(7,1,8)]+=tmp15_1 + tmp1_1 + tmp8_1;  
4421                                  EM_S[INDEX2(4,5,8)]+=tmp17_1 + tmp4_1 + tmp8_1;                                  EM_S[INDEX2(4,5,8)]+=tmp17_1 + tmp4_1 + tmp8_1;
                                 EM_S[INDEX2(0,4,8)]+=tmp14_1 + tmp3_1 + tmp4_1;  
4422                                  EM_S[INDEX2(5,5,8)]+=tmp0_1 + tmp11_1 + tmp6_1;                                  EM_S[INDEX2(5,5,8)]+=tmp0_1 + tmp11_1 + tmp6_1;
                                 EM_S[INDEX2(1,4,8)]+=tmp13_1 + tmp2_1 + tmp7_1;  
                                 EM_S[INDEX2(6,0,8)]+=tmp12_1 + tmp1_1 + tmp8_1;  
                                 EM_S[INDEX2(7,5,8)]+=tmp2_1 + tmp8_1 + tmp9_1;  
                                 EM_S[INDEX2(2,3,8)]+=tmp17_1 + tmp1_1 + tmp7_1;  
                                 EM_S[INDEX2(2,1,8)]+=tmp10_1 + tmp1_1 + tmp3_1;  
                                 EM_S[INDEX2(4,2,8)]+=tmp12_1 + tmp4_1 + tmp8_1;  
                                 EM_S[INDEX2(1,0,8)]+=tmp11_1 + tmp4_1 + tmp7_1;  
4423                                  EM_S[INDEX2(6,5,8)]+=tmp1_1 + tmp3_1 + tmp5_1;                                  EM_S[INDEX2(6,5,8)]+=tmp1_1 + tmp3_1 + tmp5_1;
4424                                  EM_S[INDEX2(3,5,8)]+=tmp15_1 + tmp1_1 + tmp7_1;                                  EM_S[INDEX2(7,5,8)]+=tmp2_1 + tmp8_1 + tmp9_1;
                                 EM_S[INDEX2(0,1,8)]+=tmp17_1 + tmp4_1 + tmp7_1;  
                                 EM_S[INDEX2(7,0,8)]+=tmp15_1 + tmp16_1 + tmp5_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp3_1 + tmp6_1 + tmp8_1;  
                                 EM_S[INDEX2(5,2,8)]+=tmp13_1 + tmp15_1 + tmp5_1;  
                                 EM_S[INDEX2(6,1,8)]+=tmp12_1 + tmp16_1 + tmp5_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp2_1 + tmp7_1 + tmp9_1;  
                                 EM_S[INDEX2(0,2,8)]+=tmp3_1 + tmp6_1 + tmp7_1;  
                                 EM_S[INDEX2(7,4,8)]+=tmp1_1 + tmp2_1 + tmp5_1;  
4425                                  EM_S[INDEX2(0,6,8)]+=tmp12_1 + tmp4_1 + tmp7_1;                                  EM_S[INDEX2(0,6,8)]+=tmp12_1 + tmp4_1 + tmp7_1;
4426                                  EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp3_1;                                  EM_S[INDEX2(1,6,8)]+=tmp10_1 + tmp13_1 + tmp15_1;
4427                                  EM_S[INDEX2(4,3,8)]+=tmp12_1 + tmp13_1 + tmp5_1;                                  EM_S[INDEX2(2,6,8)]+=tmp14_1 + tmp1_1 + tmp3_1;
4428                                    EM_S[INDEX2(3,6,8)]+=tmp16_1 + tmp2_1 + tmp7_1;
4429                                    EM_S[INDEX2(4,6,8)]+=tmp3_1 + tmp6_1 + tmp8_1;
4430                                    EM_S[INDEX2(5,6,8)]+=tmp2_1 + tmp4_1 + tmp5_1;
4431                                    EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp17_1 + tmp9_1;
4432                                    EM_S[INDEX2(7,6,8)]+=tmp11_1 + tmp1_1 + tmp8_1;
4433                                    EM_S[INDEX2(0,7,8)]+=tmp10_1 + tmp12_1 + tmp13_1;
4434                                  EM_S[INDEX2(1,7,8)]+=tmp15_1 + tmp4_1 + tmp7_1;                                  EM_S[INDEX2(1,7,8)]+=tmp15_1 + tmp4_1 + tmp7_1;
4435                                  EM_S[INDEX2(0,5,8)]+=tmp13_1 + tmp3_1 + tmp7_1;                                  EM_S[INDEX2(2,7,8)]+=tmp16_1 + tmp3_1 + tmp7_1;
4436                                  EM_S[INDEX2(3,4,8)]+=tmp10_1 + tmp15_1 + tmp16_1;                                  EM_S[INDEX2(3,7,8)]+=tmp14_1 + tmp1_1 + tmp2_1;
4437                                  EM_S[INDEX2(2,4,8)]+=tmp12_1 + tmp1_1 + tmp7_1;                                  EM_S[INDEX2(4,7,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
4438                                    EM_S[INDEX2(5,7,8)]+=tmp2_1 + tmp6_1 + tmp8_1;
4439                                    EM_S[INDEX2(6,7,8)]+=tmp17_1 + tmp1_1 + tmp8_1;
4440                                    EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp11_1 + tmp9_1;
4441                              }                              }
4442                          }                          }
4443                          ///////////////                          ///////////////
# Line 4689  void Brick::assemblePDESingle(Paso_Syste Line 4969  void Brick::assemblePDESingle(Paso_Syste
4969                                  const double tmp410_1 = C_0_7*w104;                                  const double tmp410_1 = C_0_7*w104;
4970                                  const double tmp268_1 = tmp21_0*w103;                                  const double tmp268_1 = tmp21_0*w103;
4971                                  const double tmp305_1 = C_2_1*w123;                                  const double tmp305_1 = C_2_1*w123;
4972                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                                  EM_S[INDEX2(0,0,8)]+=tmp175_1 + tmp178_1 + tmp324_1 + tmp325_1 + tmp326_1 + tmp327_1 + tmp328_1 + tmp329_1 + tmp330_1 + tmp331_1 + tmp332_1 + tmp333_1 + tmp334_1 + tmp335_1 + tmp336_1 + tmp337_1 + tmp338_1 + tmp339_1;
4973                                  EM_S[INDEX2(4,7,8)]+=tmp14_1 + tmp15_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1 + tmp23_1;                                  EM_S[INDEX2(1,0,8)]+=tmp200_1 + tmp201_1 + tmp410_1 + tmp411_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp421_1;
4974                                  EM_S[INDEX2(1,3,8)]+=tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp36_1 + tmp37_1;                                  EM_S[INDEX2(2,0,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp190_1 + tmp191_1 + tmp192_1 + tmp193_1 + tmp194_1 + tmp195_1 + tmp196_1 + tmp197_1 + tmp198_1 + tmp199_1;
                                 EM_S[INDEX2(6,4,8)]+=tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp49_1 + tmp50_1 + tmp51_1;  
4975                                  EM_S[INDEX2(3,0,8)]+=tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1;                                  EM_S[INDEX2(3,0,8)]+=tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1;
                                 EM_S[INDEX2(5,4,8)]+=tmp62_1 + tmp63_1 + tmp64_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp70_1 + tmp71_1 + tmp72_1 + tmp73_1 + tmp74_1 + tmp75_1;  
                                 EM_S[INDEX2(0,7,8)]+=tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;  
                                 EM_S[INDEX2(5,6,8)]+=tmp16_1 + tmp17_1 + tmp19_1 + tmp20_1 + tmp22_1 + tmp23_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp86_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp90_1 + tmp91_1 + tmp92_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1 + tmp97_1 + tmp98_1 + tmp99_1;  
                                 EM_S[INDEX2(1,6,8)]+=tmp100_1 + tmp101_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp102_1 + tmp103_1 + tmp104_1 + tmp105_1 + tmp106_1 + tmp107_1 + tmp108_1 + tmp109_1 + tmp110_1 + tmp111_1 + tmp112_1 + tmp113_1 + tmp114_1 + tmp115_1;  
                                 EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp10_1 + tmp116_1 + tmp117_1 + tmp118_1 + tmp119_1 + tmp120_1 + tmp121_1 + tmp12_1 + tmp13_1 + tmp1_1 + tmp3_1 + tmp7_1 + tmp8_1;  
                                 EM_S[INDEX2(2,5,8)]+=tmp122_1 + tmp123_1 + tmp76_1 + tmp77_1 + tmp78_1 + tmp81_1;  
                                 EM_S[INDEX2(0,3,8)]+=tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp58_1 + tmp59_1;  
                                 EM_S[INDEX2(7,2,8)]+=tmp132_1 + tmp133_1 + tmp134_1 + tmp135_1 + tmp136_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1;  
4976                                  EM_S[INDEX2(4,0,8)]+=tmp142_1 + tmp143_1 + tmp144_1 + tmp145_1 + tmp146_1 + tmp147_1 + tmp148_1 + tmp149_1 + tmp150_1 + tmp151_1 + tmp152_1 + tmp153_1 + tmp6_1 + tmp9_1;                                  EM_S[INDEX2(4,0,8)]+=tmp142_1 + tmp143_1 + tmp144_1 + tmp145_1 + tmp146_1 + tmp147_1 + tmp148_1 + tmp149_1 + tmp150_1 + tmp151_1 + tmp152_1 + tmp153_1 + tmp6_1 + tmp9_1;
4977                                    EM_S[INDEX2(5,0,8)]+=tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp297_1 + tmp298_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1;
4978                                    EM_S[INDEX2(6,0,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp396_1 + tmp397_1;
4979                                    EM_S[INDEX2(7,0,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1;
4980                                    EM_S[INDEX2(0,1,8)]+=tmp154_1 + tmp156_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp418_1 + tmp419_1 + tmp421_1 + tmp430_1 + tmp431_1 + tmp432_1 + tmp433_1;
4981                                    EM_S[INDEX2(1,1,8)]+=tmp211_1 + tmp212_1 + tmp244_1 + tmp246_1 + tmp252_1 + tmp254_1 + tmp300_1 + tmp301_1 + tmp302_1 + tmp303_1 + tmp304_1 + tmp305_1 + tmp306_1 + tmp307_1 + tmp308_1 + tmp309_1 + tmp310_1 + tmp311_1;
4982                                    EM_S[INDEX2(2,1,8)]+=tmp124_1 + tmp125_1 + tmp127_1 + tmp130_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1;
4983                                    EM_S[INDEX2(3,1,8)]+=tmp24_1 + tmp25_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp31_1 + tmp34_1 + tmp35_1 + tmp43_1 + tmp440_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp44_1;
4984                                    EM_S[INDEX2(4,1,8)]+=tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp297_1 + tmp298_1 + tmp299_1;
4985                                    EM_S[INDEX2(5,1,8)]+=tmp102_1 + tmp103_1 + tmp104_1 + tmp105_1 + tmp106_1 + tmp107_1 + tmp108_1 + tmp109_1 + tmp110_1 + tmp111_1 + tmp112_1 + tmp113_1 + tmp114_1 + tmp115_1;
4986                                    EM_S[INDEX2(6,1,8)]+=tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1;
4987                                    EM_S[INDEX2(7,1,8)]+=tmp280_1 + tmp281_1 + tmp283_1 + tmp284_1 + tmp286_1 + tmp288_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1;
4988                                    EM_S[INDEX2(0,2,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp192_1 + tmp194_1 + tmp195_1 + tmp197_1 + tmp274_1 + tmp277_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp447_1;
4989                                  EM_S[INDEX2(1,2,8)]+=tmp126_1 + tmp128_1 + tmp129_1 + tmp131_1 + tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp58_1 + tmp59_1;                                  EM_S[INDEX2(1,2,8)]+=tmp126_1 + tmp128_1 + tmp129_1 + tmp131_1 + tmp52_1 + tmp53_1 + tmp54_1 + tmp55_1 + tmp58_1 + tmp59_1;
4990                                  EM_S[INDEX2(6,7,8)]+=tmp154_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp162_1 + tmp163_1 + tmp164_1 + tmp165_1 + tmp166_1 + tmp167_1;                                  EM_S[INDEX2(2,2,8)]+=tmp206_1 + tmp207_1 + tmp236_1 + tmp237_1 + tmp238_1 + tmp239_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp243_1 + tmp244_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp249_1 + tmp250_1 + tmp251_1;
4991                                    EM_S[INDEX2(3,2,8)]+=tmp312_1 + tmp313_1 + tmp314_1 + tmp315_1 + tmp316_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp321_1 + tmp322_1 + tmp323_1 + tmp62_1 + tmp63_1;
4992                                    EM_S[INDEX2(4,2,8)]+=tmp388_1 + tmp389_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1;
4993                                    EM_S[INDEX2(5,2,8)]+=tmp100_1 + tmp101_1 + tmp434_1 + tmp435_1 + tmp79_1 + tmp80_1;
4994                                    EM_S[INDEX2(6,2,8)]+=tmp109_1 + tmp111_1 + tmp452_1 + tmp453_1 + tmp454_1 + tmp455_1 + tmp86_1 + tmp87_1 + tmp88_1 + tmp90_1 + tmp93_1 + tmp94_1 + tmp96_1 + tmp97_1;
4995                                    EM_S[INDEX2(7,2,8)]+=tmp132_1 + tmp133_1 + tmp134_1 + tmp135_1 + tmp136_1 + tmp137_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1;
4996                                    EM_S[INDEX2(0,3,8)]+=tmp124_1 + tmp125_1 + tmp126_1 + tmp127_1 + tmp128_1 + tmp129_1 + tmp130_1 + tmp131_1 + tmp58_1 + tmp59_1;
4997                                    EM_S[INDEX2(1,3,8)]+=tmp24_1 + tmp25_1 + tmp26_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp30_1 + tmp31_1 + tmp32_1 + tmp33_1 + tmp34_1 + tmp35_1 + tmp36_1 + tmp37_1;
4998                                    EM_S[INDEX2(2,3,8)]+=tmp312_1 + tmp314_1 + tmp315_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp321_1 + tmp322_1 + tmp362_1 + tmp364_1 + tmp402_1 + tmp403_1 + tmp404_1 + tmp405_1;
4999                                  EM_S[INDEX2(3,3,8)]+=tmp168_1 + tmp169_1 + tmp170_1 + tmp171_1 + tmp172_1 + tmp173_1 + tmp174_1 + tmp175_1 + tmp176_1 + tmp177_1 + tmp178_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp182_1 + tmp183_1 + tmp184_1 + tmp185_1;                                  EM_S[INDEX2(3,3,8)]+=tmp168_1 + tmp169_1 + tmp170_1 + tmp171_1 + tmp172_1 + tmp173_1 + tmp174_1 + tmp175_1 + tmp176_1 + tmp177_1 + tmp178_1 + tmp179_1 + tmp180_1 + tmp181_1 + tmp182_1 + tmp183_1 + tmp184_1 + tmp185_1;
5000                                  EM_S[INDEX2(2,0,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp190_1 + tmp191_1 + tmp192_1 + tmp193_1 + tmp194_1 + tmp195_1 + tmp196_1 + tmp197_1 + tmp198_1 + tmp199_1;                                  EM_S[INDEX2(4,3,8)]+=tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1 + tmp79_1 + tmp80_1;
5001                                  EM_S[INDEX2(7,6,8)]+=tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp162_1 + tmp163_1 + tmp166_1 + tmp167_1 + tmp200_1 + tmp201_1 + tmp202_1 + tmp203_1 + tmp204_1 + tmp205_1;                                  EM_S[INDEX2(5,3,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp283_1 + tmp284_1 + tmp285_1 + tmp286_1 + tmp287_1 + tmp288_1 + tmp289_1;
                                 EM_S[INDEX2(4,4,8)]+=tmp206_1 + tmp207_1 + tmp208_1 + tmp209_1 + tmp210_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp222_1 + tmp223_1;  
5002                                  EM_S[INDEX2(6,3,8)]+=tmp132_1 + tmp136_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1;                                  EM_S[INDEX2(6,3,8)]+=tmp132_1 + tmp136_1 + tmp138_1 + tmp139_1 + tmp140_1 + tmp141_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1;
5003                                    EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp10_1 + tmp11_1 + tmp12_1 + tmp13_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
5004                                    EM_S[INDEX2(0,4,8)]+=tmp119_1 + tmp121_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp146_1 + tmp147_1 + tmp150_1 + tmp151_1 + tmp153_1 + tmp368_1 + tmp369_1 + tmp370_1 + tmp371_1;
5005                                    EM_S[INDEX2(1,4,8)]+=tmp292_1 + tmp293_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;
5006                                    EM_S[INDEX2(2,4,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp396_1 + tmp397_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;
5007                                    EM_S[INDEX2(3,4,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp78_1 + tmp81_1;
5008                                    EM_S[INDEX2(4,4,8)]+=tmp206_1 + tmp207_1 + tmp208_1 + tmp209_1 + tmp210_1 + tmp211_1 + tmp212_1 + tmp213_1 + tmp214_1 + tmp215_1 + tmp216_1 + tmp217_1 + tmp218_1 + tmp219_1 + tmp220_1 + tmp221_1 + tmp222_1 + tmp223_1;
5009                                    EM_S[INDEX2(5,4,8)]+=tmp62_1 + tmp63_1 + tmp64_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp69_1 + tmp70_1 + tmp71_1 + tmp72_1 + tmp73_1 + tmp74_1 + tmp75_1;
5010                                    EM_S[INDEX2(6,4,8)]+=tmp38_1 + tmp39_1 + tmp40_1 + tmp41_1 + tmp42_1 + tmp43_1 + tmp44_1 + tmp45_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp49_1 + tmp50_1 + tmp51_1;
5011                                    EM_S[INDEX2(7,4,8)]+=tmp17_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;
5012                                    EM_S[INDEX2(0,5,8)]+=tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp296_1 + tmp299_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;
5013                                  EM_S[INDEX2(1,5,8)]+=tmp102_1 + tmp103_1 + tmp105_1 + tmp106_1 + tmp110_1 + tmp112_1 + tmp113_1 + tmp115_1 + tmp228_1 + tmp229_1 + tmp230_1 + tmp231_1 + tmp92_1 + tmp98_1;                                  EM_S[INDEX2(1,5,8)]+=tmp102_1 + tmp103_1 + tmp105_1 + tmp106_1 + tmp110_1 + tmp112_1 + tmp113_1 + tmp115_1 + tmp228_1 + tmp229_1 + tmp230_1 + tmp231_1 + tmp92_1 + tmp98_1;
5014                                  EM_S[INDEX2(3,6,8)]+=tmp133_1 + tmp134_1 + tmp135_1 + tmp137_1 + tmp139_1 + tmp141_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;                                  EM_S[INDEX2(2,5,8)]+=tmp122_1 + tmp123_1 + tmp76_1 + tmp77_1 + tmp78_1 + tmp81_1;
5015                                  EM_S[INDEX2(2,2,8)]+=tmp206_1 + tmp207_1 + tmp236_1 + tmp237_1 + tmp238_1 + tmp239_1 + tmp240_1 + tmp241_1 + tmp242_1 + tmp243_1 + tmp244_1 + tmp245_1 + tmp246_1 + tmp247_1 + tmp248_1 + tmp249_1 + tmp250_1 + tmp251_1;                                  EM_S[INDEX2(3,5,8)]+=tmp280_1 + tmp281_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;
                                 EM_S[INDEX2(7,7,8)]+=tmp215_1 + tmp222_1 + tmp247_1 + tmp250_1 + tmp252_1 + tmp253_1 + tmp254_1 + tmp255_1 + tmp256_1 + tmp257_1 + tmp258_1 + tmp259_1 + tmp260_1 + tmp261_1 + tmp262_1 + tmp263_1 + tmp264_1 + tmp265_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp266_1 + tmp267_1 + tmp268_1 + tmp269_1 + tmp270_1 + tmp271_1 + tmp272_1 + tmp273_1 + tmp274_1 + tmp275_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp279_1;  
                                 EM_S[INDEX2(5,3,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp283_1 + tmp284_1 + tmp285_1 + tmp286_1 + tmp287_1 + tmp288_1 + tmp289_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp296_1 + tmp297_1 + tmp298_1 + tmp299_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp211_1 + tmp212_1 + tmp244_1 + tmp246_1 + tmp252_1 + tmp254_1 + tmp300_1 + tmp301_1 + tmp302_1 + tmp303_1 + tmp304_1 + tmp305_1 + tmp306_1 + tmp307_1 + tmp308_1 + tmp309_1 + tmp310_1 + tmp311_1;  
                                 EM_S[INDEX2(2,7,8)]+=tmp139_1 + tmp141_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;  
                                 EM_S[INDEX2(3,2,8)]+=tmp312_1 + tmp313_1 + tmp314_1 + tmp315_1 + tmp316_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp320_1 + tmp321_1 + tmp322_1 + tmp323_1 + tmp62_1 + tmp63_1;  
                                 EM_S[INDEX2(0,0,8)]+=tmp175_1 + tmp178_1 + tmp324_1 + tmp325_1 + tmp326_1 + tmp327_1 + tmp328_1 + tmp329_1 + tmp330_1 + tmp331_1 + tmp332_1 + tmp333_1 + tmp334_1 + tmp335_1 + tmp336_1 + tmp337_1 + tmp338_1 + tmp339_1;  
                                 EM_S[INDEX2(6,6,8)]+=tmp179_1 + tmp184_1 + tmp325_1 + tmp326_1 + tmp340_1 + tmp341_1 + tmp342_1 + tmp343_1 + tmp344_1 + tmp345_1 + tmp346_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp352_1 + tmp353_1;  
                                 EM_S[INDEX2(5,0,8)]+=tmp292_1 + tmp293_1 + tmp294_1 + tmp295_1 + tmp297_1 + tmp298_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1;  
                                 EM_S[INDEX2(7,1,8)]+=tmp280_1 + tmp281_1 + tmp283_1 + tmp284_1 + tmp286_1 + tmp288_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1;  
5016                                  EM_S[INDEX2(4,5,8)]+=tmp362_1 + tmp363_1 + tmp364_1 + tmp365_1 + tmp366_1 + tmp367_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp70_1 + tmp72_1 + tmp74_1 + tmp75_1;                                  EM_S[INDEX2(4,5,8)]+=tmp362_1 + tmp363_1 + tmp364_1 + tmp365_1 + tmp366_1 + tmp367_1 + tmp65_1 + tmp66_1 + tmp67_1 + tmp68_1 + tmp70_1 + tmp72_1 + tmp74_1 + tmp75_1;
                                 EM_S[INDEX2(0,4,8)]+=tmp119_1 + tmp121_1 + tmp142_1 + tmp143_1 + tmp144_1 + tmp146_1 + tmp147_1 + tmp150_1 + tmp151_1 + tmp153_1 + tmp368_1 + tmp369_1 + tmp370_1 + tmp371_1;  
5017                                  EM_S[INDEX2(5,5,8)]+=tmp168_1 + tmp170_1 + tmp330_1 + tmp335_1 + tmp345_1 + tmp352_1 + tmp372_1 + tmp373_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp377_1 + tmp378_1 + tmp379_1 + tmp380_1 + tmp381_1 + tmp382_1 + tmp383_1;                                  EM_S[INDEX2(5,5,8)]+=tmp168_1 + tmp170_1 + tmp330_1 + tmp335_1 + tmp345_1 + tmp352_1 + tmp372_1 + tmp373_1 + tmp374_1 + tmp375_1 + tmp376_1 + tmp377_1 + tmp378_1 + tmp379_1 + tmp380_1 + tmp381_1 + tmp382_1 + tmp383_1;
                                 EM_S[INDEX2(1,4,8)]+=tmp292_1 + tmp293_1 + tmp354_1 + tmp355_1 + tmp356_1 + tmp357_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;  
                                 EM_S[INDEX2(6,0,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp396_1 + tmp397_1;  
                                 EM_S[INDEX2(7,5,8)]+=tmp190_1 + tmp191_1 + tmp266_1 + tmp267_1 + tmp268_1 + tmp269_1 + tmp271_1 + tmp272_1 + tmp276_1 + tmp279_1 + tmp398_1 + tmp399_1 + tmp400_1 + tmp401_1;  
                                 EM_S[INDEX2(2,3,8)]+=tmp312_1 + tmp314_1 + tmp315_1 + tmp317_1 + tmp318_1 + tmp319_1 + tmp321_1 + tmp322_1 + tmp362_1 + tmp364_1 + tmp402_1 + tmp403_1 + tmp404_1 + tmp405_1;  
                                 EM_S[INDEX2(2,1,8)]+=tmp124_1 + tmp125_1 + tmp127_1 + tmp130_1 + tmp56_1 + tmp57_1 + tmp58_1 + tmp59_1 + tmp60_1 + tmp61_1;  
                                 EM_S[INDEX2(4,2,8)]+=tmp388_1 + tmp389_1 + tmp392_1 + tmp393_1 + tmp394_1 + tmp395_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1;  
                                 EM_S[INDEX2(1,0,8)]+=tmp200_1 + tmp201_1 + tmp410_1 + tmp411_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp417_1 + tmp418_1 + tmp419_1 + tmp420_1 + tmp421_1;  
5018                                  EM_S[INDEX2(6,5,8)]+=tmp14_1 + tmp15_1 + tmp17_1 + tmp18_1 + tmp21_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1;                                  EM_S[INDEX2(6,5,8)]+=tmp14_1 + tmp15_1 + tmp17_1 + tmp18_1 + tmp21_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1;
5019                                  EM_S[INDEX2(3,5,8)]+=tmp280_1 + tmp281_1 + tmp358_1 + tmp359_1 + tmp360_1 + tmp361_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;                                  EM_S[INDEX2(7,5,8)]+=tmp190_1 + tmp191_1 + tmp266_1 + tmp267_1 + tmp268_1 + tmp269_1 + tmp271_1 + tmp272_1 + tmp276_1 + tmp279_1 + tmp398_1 + tmp399_1 + tmp400_1 + tmp401_1;
                                 EM_S[INDEX2(0,1,8)]+=tmp154_1 + tmp156_1 + tmp412_1 + tmp413_1 + tmp414_1 + tmp415_1 + tmp416_1 + tmp418_1 + tmp419_1 + tmp421_1 + tmp430_1 + tmp431_1 + tmp432_1 + tmp433_1;  
                                 EM_S[INDEX2(7,0,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp32_1 + tmp36_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp42_1 + tmp436_1 + tmp437_1 + tmp438_1 + tmp439_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1;  
                                 EM_S[INDEX2(5,2,8)]+=tmp100_1 + tmp101_1 + tmp434_1 + tmp435_1 + tmp79_1 + tmp80_1;  
                                 EM_S[INDEX2(6,1,8)]+=tmp122_1 + tmp123_1 + tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp24_1 + tmp25_1 + tmp27_1 + tmp28_1 + tmp29_1 + tmp31_1 + tmp34_1 + tmp35_1 + tmp43_1 + tmp440_1 + tmp441_1 + tmp442_1 + tmp443_1 + tmp44_1;  
                                 EM_S[INDEX2(0,2,8)]+=tmp186_1 + tmp187_1 + tmp188_1 + tmp189_1 + tmp192_1 + tmp194_1 + tmp195_1 + tmp197_1 + tmp274_1 + tmp277_1 + tmp444_1 + tmp445_1 + tmp446_1 + tmp447_1;  
                                 EM_S[INDEX2(7,4,8)]+=tmp17_1 + tmp23_1 + tmp422_1 + tmp423_1 + tmp424_1 + tmp425_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;  
5020                                  EM_S[INDEX2(0,6,8)]+=tmp388_1 + tmp389_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;                                  EM_S[INDEX2(0,6,8)]+=tmp388_1 + tmp389_1 + tmp406_1 + tmp407_1 + tmp408_1 + tmp409_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;
5021                                  EM_S[INDEX2(6,2,8)]+=tmp109_1 + tmp111_1 + tmp452_1 + tmp453_1 + tmp454_1 + tmp455_1 + tmp86_1 + tmp87_1 + tmp88_1 + tmp90_1 + tmp93_1 + tmp94_1 + tmp96_1 + tmp97_1;                                  EM_S[INDEX2(1,6,8)]+=tmp100_1 + tmp101_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;
5022                                  EM_S[INDEX2(4,3,8)]+=tmp434_1 + tmp435_1 + tmp76_1 + tmp77_1 + tmp79_1 + tmp80_1;                                  EM_S[INDEX2(2,6,8)]+=tmp86_1 + tmp87_1 + tmp88_1 + tmp89_1 + tmp90_1 + tmp91_1 + tmp92_1 + tmp93_1 + tmp94_1 + tmp95_1 + tmp96_1 + tmp97_1 + tmp98_1 + tmp99_1;
5023                                    EM_S[INDEX2(3,6,8)]+=tmp133_1 + tmp134_1 + tmp135_1 + tmp137_1 + tmp139_1 + tmp141_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;
5024                                    EM_S[INDEX2(4,6,8)]+=tmp32_1 + tmp36_1 + tmp38_1 + tmp39_1 + tmp40_1 + tmp42_1 + tmp436_1 + tmp437_1 + tmp438_1 + tmp439_1 + tmp46_1 + tmp47_1 + tmp48_1 + tmp51_1;
5025                                    EM_S[INDEX2(5,6,8)]+=tmp16_1 + tmp17_1 + tmp19_1 + tmp20_1 + tmp22_1 + tmp23_1 + tmp82_1 + tmp83_1 + tmp84_1 + tmp85_1;
5026                                    EM_S[INDEX2(6,6,8)]+=tmp179_1 + tmp184_1 + tmp325_1 + tmp326_1 + tmp340_1 + tmp341_1 + tmp342_1 + tmp343_1 + tmp344_1 + tmp345_1 + tmp346_1 + tmp347_1 + tmp348_1 + tmp349_1 + tmp350_1 + tmp351_1 + tmp352_1 + tmp353_1;
5027                                    EM_S[INDEX2(7,6,8)]+=tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp162_1 + tmp163_1 + tmp166_1 + tmp167_1 + tmp200_1 + tmp201_1 + tmp202_1 + tmp203_1 + tmp204_1 + tmp205_1;
5028                                    EM_S[INDEX2(0,7,8)]+=tmp76_1 + tmp77_1 + tmp78_1 + tmp79_1 + tmp80_1 + tmp81_1;
5029                                  EM_S[INDEX2(1,7,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp285_1 + tmp287_1 + tmp289_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;                                  EM_S[INDEX2(1,7,8)]+=tmp280_1 + tmp281_1 + tmp282_1 + tmp285_1 + tmp287_1 + tmp289_1 + tmp426_1 + tmp427_1 + tmp428_1 + tmp429_1;
5030                                  EM_S[INDEX2(0,5,8)]+=tmp290_1 + tmp291_1 + tmp292_1 + tmp293_1 + tmp296_1 + tmp299_1 + tmp384_1 + tmp385_1 + tmp386_1 + tmp387_1;                                  EM_S[INDEX2(2,7,8)]+=tmp139_1 + tmp141_1 + tmp224_1 + tmp225_1 + tmp226_1 + tmp227_1 + tmp232_1 + tmp233_1 + tmp234_1 + tmp235_1;
5031                                  EM_S[INDEX2(3,4,8)]+=tmp100_1 + tmp101_1 + tmp122_1 + tmp123_1 + tmp78_1 + tmp81_1;                                  EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp10_1 + tmp116_1 + tmp117_1 + tmp118_1 + tmp119_1 + tmp120_1 + tmp121_1 + tmp12_1 + tmp13_1 + tmp1_1 + tmp3_1 + tmp7_1 + tmp8_1;
5032                                  EM_S[INDEX2(2,4,8)]+=tmp388_1 + tmp389_1 + tmp390_1 + tmp391_1 + tmp396_1 + tmp397_1 + tmp448_1 + tmp449_1 + tmp450_1 + tmp451_1;                                  EM_S[INDEX2(4,7,8)]+=tmp14_1 + tmp15_1 + tmp16_1 + tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp22_1 + tmp23_1;
5033                                    EM_S[INDEX2(5,7,8)]+=tmp266_1 + tmp267_1 + tmp268_1 + tmp269_1 + tmp270_1 + tmp271_1 + tmp272_1 + tmp273_1 + tmp274_1 + tmp275_1 + tmp276_1 + tmp277_1 + tmp278_1 + tmp279_1;
5034                                    EM_S[INDEX2(6,7,8)]+=tmp154_1 + tmp155_1 + tmp156_1 + tmp157_1 + tmp158_1 + tmp159_1 + tmp160_1 + tmp161_1 + tmp162_1 + tmp163_1 + tmp164_1 + tmp165_1 + tmp166_1 + tmp167_1;
5035                                    EM_S[INDEX2(7,7,8)]+=tmp215_1 + tmp222_1 + tmp247_1 + tmp250_1 + tmp252_1 + tmp253_1 + tmp254_1 + tmp255_1 + tmp256_1 + tmp257_1 + tmp258_1 + tmp259_1 + tmp260_1 + tmp261_1 + tmp262_1 + tmp263_1 + tmp264_1 + tmp265_1;
5036                              } else { // constant data                              } else { // constant data
5037                                  const double C_0 = C_p[0];                                  const double C_0 = C_p[0];
5038                                  const double C_1 = C_p[1];                                  const double C_1 = C_p[1];
# Line 4775  void Brick::assemblePDESingle(Paso_Syste Line 5055  void Brick::assemblePDESingle(Paso_Syste
5055                                  const double tmp6_1 = C_2*w135;                                  const double tmp6_1 = C_2*w135;
5056                                  const double tmp10_1 = C_2*w136;                                  const double tmp10_1 = C_2*w136;
5057                                  const double tmp9_1 = C_1*w130;                                  const double tmp9_1 = C_1*w130;
5058                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                                  EM_S[INDEX2(0,0,8)]+=tmp0_1 + tmp11_1 + tmp8_1;
5059                                  EM_S[INDEX2(4,7,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                                  EM_S[INDEX2(1,0,8)]+=tmp11_1 + tmp4_1 + tmp9_1;
5060                                  EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp4_1 + tmp5_1;                                  EM_S[INDEX2(2,0,8)]+=tmp4_1 + tmp7_1 + tmp8_1;
                                 EM_S[INDEX2(6,4,8)]+=tmp6_1 + tmp7_1 + tmp8_1;  
5061                                  EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp7_1 + tmp9_1;                                  EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp7_1 + tmp9_1;
                                 EM_S[INDEX2(5,4,8)]+=tmp11_1 + tmp6_1 + tmp9_1;  
                                 EM_S[INDEX2(0,7,8)]+=tmp12_1 + tmp13_1 + tmp3_1;  
                                 EM_S[INDEX2(5,6,8)]+=tmp1_1 + tmp3_1 + tmp7_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp14_1 + tmp1_1 + tmp7_1;  
                                 EM_S[INDEX2(1,6,8)]+=tmp12_1 + tmp15_1 + tmp3_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp0_1 + tmp2_1 + tmp9_1;  
                                 EM_S[INDEX2(3,7,8)]+=tmp14_1 + tmp1_1 + tmp2_1;  
                                 EM_S[INDEX2(2,5,8)]+=tmp13_1 + tmp16_1 + tmp3_1;  
                                 EM_S[INDEX2(0,3,8)]+=tmp10_1 + tmp1_1 + tmp2_1;  
                                 EM_S[INDEX2(7,2,8)]+=tmp12_1 + tmp4_1 + tmp7_1;  
5062                                  EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp7_1 + tmp9_1;                                  EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp7_1 + tmp9_1;
5063                                    EM_S[INDEX2(5,0,8)]+=tmp16_1 + tmp4_1 + tmp7_1;
5064                                    EM_S[INDEX2(6,0,8)]+=tmp15_1 + tmp4_1 + tmp9_1;
5065                                    EM_S[INDEX2(7,0,8)]+=tmp10_1 + tmp15_1 + tmp16_1;
5066                                    EM_S[INDEX2(0,1,8)]+=tmp17_1 + tmp4_1 + tmp9_1;
5067                                    EM_S[INDEX2(1,1,8)]+=tmp0_1 + tmp17_1 + tmp8_1;
5068                                    EM_S[INDEX2(2,1,8)]+=tmp10_1 + tmp2_1 + tmp9_1;
5069                                    EM_S[INDEX2(3,1,8)]+=tmp2_1 + tmp4_1 + tmp8_1;
5070                                    EM_S[INDEX2(4,1,8)]+=tmp16_1 + tmp2_1 + tmp4_1;
5071                                    EM_S[INDEX2(5,1,8)]+=tmp0_1 + tmp2_1 + tmp9_1;
5072                                    EM_S[INDEX2(6,1,8)]+=tmp10_1 + tmp13_1 + tmp16_1;
5073                                    EM_S[INDEX2(7,1,8)]+=tmp13_1 + tmp4_1 + tmp9_1;
5074                                    EM_S[INDEX2(0,2,8)]+=tmp4_1 + tmp5_1 + tmp7_1;
5075                                  EM_S[INDEX2(1,2,8)]+=tmp10_1 + tmp1_1 + tmp7_1;                                  EM_S[INDEX2(1,2,8)]+=tmp10_1 + tmp1_1 + tmp7_1;
5076                                  EM_S[INDEX2(6,7,8)]+=tmp17_1 + tmp1_1 + tmp6_1;                                  EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp11_1 + tmp5_1;
5077                                    EM_S[INDEX2(3,2,8)]+=tmp11_1 + tmp1_1 + tmp4_1;
5078                                    EM_S[INDEX2(4,2,8)]+=tmp15_1 + tmp1_1 + tmp4_1;
5079                                    EM_S[INDEX2(5,2,8)]+=tmp10_1 + tmp12_1 + tmp15_1;
5080                                    EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp7_1;
5081                                    EM_S[INDEX2(7,2,8)]+=tmp12_1 + tmp4_1 + tmp7_1;
5082                                    EM_S[INDEX2(0,3,8)]+=tmp10_1 + tmp1_1 + tmp2_1;
5083                                    EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp4_1 + tmp5_1;
5084                                    EM_S[INDEX2(2,3,8)]+=tmp17_1 + tmp1_1 + tmp4_1;
5085                                  EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp17_1 + tmp5_1;                                  EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp17_1 + tmp5_1;
5086                                  EM_S[INDEX2(2,0,8)]+=tmp4_1 + tmp7_1 + tmp8_1;                                  EM_S[INDEX2(4,3,8)]+=tmp10_1 + tmp12_1 + tmp13_1;
5087                                  EM_S[INDEX2(7,6,8)]+=tmp11_1 + tmp1_1 + tmp6_1;                                  EM_S[INDEX2(5,3,8)]+=tmp13_1 + tmp1_1 + tmp4_1;
                                 EM_S[INDEX2(4,4,8)]+=tmp11_1 + tmp14_1 + tmp8_1;  
5088                                  EM_S[INDEX2(6,3,8)]+=tmp12_1 + tmp2_1 + tmp4_1;                                  EM_S[INDEX2(6,3,8)]+=tmp12_1 + tmp2_1 + tmp4_1;
5089                                    EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5090                                    EM_S[INDEX2(0,4,8)]+=tmp14_1 + tmp7_1 + tmp9_1;
5091                                    EM_S[INDEX2(1,4,8)]+=tmp16_1 + tmp6_1 + tmp7_1;
5092                                    EM_S[INDEX2(2,4,8)]+=tmp15_1 + tmp6_1 + tmp9_1;
5093                                    EM_S[INDEX2(3,4,8)]+=tmp15_1 + tmp16_1 + tmp3_1;
5094                                    EM_S[INDEX2(4,4,8)]+=tmp11_1 + tmp14_1 + tmp8_1;
5095                                    EM_S[INDEX2(5,4,8)]+=tmp11_1 + tmp6_1 + tmp9_1;
5096                                    EM_S[INDEX2(6,4,8)]+=tmp6_1 + tmp7_1 + tmp8_1;
5097                                    EM_S[INDEX2(7,4,8)]+=tmp3_1 + tmp7_1 + tmp9_1;
5098                                    EM_S[INDEX2(0,5,8)]+=tmp16_1 + tmp2_1 + tmp6_1;
5099                                  EM_S[INDEX2(1,5,8)]+=tmp14_1 + tmp2_1 + tmp9_1;                                  EM_S[INDEX2(1,5,8)]+=tmp14_1 + tmp2_1 + tmp9_1;
5100                                  EM_S[INDEX2(3,6,8)]+=tmp12_1 + tmp6_1 + tmp7_1;                                  EM_S[INDEX2(2,5,8)]+=tmp13_1 + tmp16_1 + tmp3_1;
5101                                  EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp11_1 + tmp5_1;                                  EM_S[INDEX2(3,5,8)]+=tmp13_1 + tmp6_1 + tmp9_1;
                                 EM_S[INDEX2(7,7,8)]+=tmp14_1 + tmp17_1 + tmp5_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp2_1 + tmp5_1 + tmp6_1;  
                                 EM_S[INDEX2(5,3,8)]+=tmp13_1 + tmp1_1 + tmp4_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp16_1 + tmp2_1 + tmp4_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp0_1 + tmp17_1 + tmp8_1;  
                                 EM_S[INDEX2(2,7,8)]+=tmp12_1 + tmp2_1 + tmp6_1;  
                                 EM_S[INDEX2(3,2,8)]+=tmp11_1 + tmp1_1 + tmp4_1;  
                                 EM_S[INDEX2(0,0,8)]+=tmp0_1 + tmp11_1 + tmp8_1;  
                                 EM_S[INDEX2(6,6,8)]+=tmp11_1 + tmp14_1 + tmp5_1;  
                                 EM_S[INDEX2(5,0,8)]+=tmp16_1 + tmp4_1 + tmp7_1;  
                                 EM_S[INDEX2(7,1,8)]+=tmp13_1 + tmp4_1 + tmp9_1;  
5102                                  EM_S[INDEX2(4,5,8)]+=tmp17_1 + tmp6_1 + tmp9_1;                                  EM_S[INDEX2(4,5,8)]+=tmp17_1 + tmp6_1 + tmp9_1;
                                 EM_S[INDEX2(0,4,8)]+=tmp14_1 + tmp7_1 + tmp9_1;  
5103                                  EM_S[INDEX2(5,5,8)]+=tmp14_1 + tmp17_1 + tmp8_1;                                  EM_S[INDEX2(5,5,8)]+=tmp14_1 + tmp17_1 + tmp8_1;
                                 EM_S[INDEX2(1,4,8)]+=tmp16_1 + tmp6_1 + tmp7_1;  
                                 EM_S[INDEX2(6,0,8)]+=tmp15_1 + tmp4_1 + tmp9_1;  
                                 EM_S[INDEX2(7,5,8)]+=tmp2_1 + tmp6_1 + tmp8_1;  
                                 EM_S[INDEX2(2,3,8)]+=tmp17_1 + tmp1_1 + tmp4_1;  
                                 EM_S[INDEX2(2,1,8)]+=tmp10_1 + tmp2_1 + tmp9_1;  
                                 EM_S[INDEX2(4,2,8)]+=tmp15_1 + tmp1_1 + tmp4_1;  
                                 EM_S[INDEX2(1,0,8)]+=tmp11_1 + tmp4_1 + tmp9_1;  
5104                                  EM_S[INDEX2(6,5,8)]+=tmp2_1 + tmp3_1 + tmp9_1;                                  EM_S[INDEX2(6,5,8)]+=tmp2_1 + tmp3_1 + tmp9_1;
5105                                  EM_S[INDEX2(3,5,8)]+=tmp13_1 + tmp6_1 + tmp9_1;                                  EM_S[INDEX2(7,5,8)]+=tmp2_1 + tmp6_1 + tmp8_1;
                                 EM_S[INDEX2(0,1,8)]+=tmp17_1 + tmp4_1 + tmp9_1;  
                                 EM_S[INDEX2(7,0,8)]+=tmp10_1 + tmp15_1 + tmp16_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp5_1 + tmp6_1 + tmp7_1;  
                                 EM_S[INDEX2(5,2,8)]+=tmp10_1 + tmp12_1 + tmp15_1;  
                                 EM_S[INDEX2(6,1,8)]+=tmp10_1 + tmp13_1 + tmp16_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp2_1 + tmp4_1 + tmp8_1;  
                                 EM_S[INDEX2(0,2,8)]+=tmp4_1 + tmp5_1 + tmp7_1;  
                                 EM_S[INDEX2(7,4,8)]+=tmp3_1 + tmp7_1 + tmp9_1;  
5106                                  EM_S[INDEX2(0,6,8)]+=tmp15_1 + tmp1_1 + tmp6_1;                                  EM_S[INDEX2(0,6,8)]+=tmp15_1 + tmp1_1 + tmp6_1;
5107                                  EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp7_1;                                  EM_S[INDEX2(1,6,8)]+=tmp12_1 + tmp15_1 + tmp3_1;
5108                                  EM_S[INDEX2(4,3,8)]+=tmp10_1 + tmp12_1 + tmp13_1;                                  EM_S[INDEX2(2,6,8)]+=tmp14_1 + tmp1_1 + tmp7_1;
5109                                    EM_S[INDEX2(3,6,8)]+=tmp12_1 + tmp6_1 + tmp7_1;
5110                                    EM_S[INDEX2(4,6,8)]+=tmp5_1 + tmp6_1 + tmp7_1;
5111                                    EM_S[INDEX2(5,6,8)]+=tmp1_1 + tmp3_1 + tmp7_1;
5112                                    EM_S[INDEX2(6,6,8)]+=tmp11_1 + tmp14_1 + tmp5_1;
5113                                    EM_S[INDEX2(7,6,8)]+=tmp11_1 + tmp1_1 + tmp6_1;
5114                                    EM_S[INDEX2(0,7,8)]+=tmp12_1 + tmp13_1 + tmp3_1;
5115                                  EM_S[INDEX2(1,7,8)]+=tmp13_1 + tmp1_1 + tmp6_1;                                  EM_S[INDEX2(1,7,8)]+=tmp13_1 + tmp1_1 + tmp6_1;
5116                                  EM_S[INDEX2(0,5,8)]+=tmp16_1 + tmp2_1 + tmp6_1;                                  EM_S[INDEX2(2,7,8)]+=tmp12_1 + tmp2_1 + tmp6_1;
5117                                  EM_S[INDEX2(3,4,8)]+=tmp15_1 + tmp16_1 + tmp3_1;                                  EM_S[INDEX2(3,7,8)]+=tmp14_1 + tmp1_1 + tmp2_1;
5118                                  EM_S[INDEX2(2,4,8)]+=tmp15_1 + tmp6_1 + tmp9_1;                                  EM_S[INDEX2(4,7,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
5119                                    EM_S[INDEX2(5,7,8)]+=tmp2_1 + tmp5_1 + tmp6_1;
5120                                    EM_S[INDEX2(6,7,8)]+=tmp17_1 + tmp1_1 + tmp6_1;
5121                                    EM_S[INDEX2(7,7,8)]+=tmp14_1 + tmp17_1 + tmp5_1;
5122                              }                              }
5123                          }                          }
5124                          ///////////////                          ///////////////
# Line 5034  void Brick::assemblePDESingle(Paso_Syste Line 5314  void Brick::assemblePDESingle(Paso_Syste
5314                                  const double tmp0_1 = D_0*w151;                                  const double tmp0_1 = D_0*w151;
5315                                  const double tmp2_1 = D_0*w153;                                  const double tmp2_1 = D_0*w153;
5316                                  const double tmp1_1 = D_0*w152;                                  const double tmp1_1 = D_0*w152;
5317                                  EM_S[INDEX2(7,3,8)]+=tmp0_1;                                  EM_S[INDEX2(0,0,8)]+=tmp3_1;
5318                                  EM_S[INDEX2(4,7,8)]+=tmp1_1;                                  EM_S[INDEX2(1,0,8)]+=tmp0_1;
5319                                  EM_S[INDEX2(1,3,8)]+=tmp0_1;                                  EM_S[INDEX2(2,0,8)]+=tmp0_1;
                                 EM_S[INDEX2(6,4,8)]+=tmp0_1;  
5320                                  EM_S[INDEX2(3,0,8)]+=tmp1_1;                                  EM_S[INDEX2(3,0,8)]+=tmp1_1;
                                 EM_S[INDEX2(5,4,8)]+=tmp0_1;  
                                 EM_S[INDEX2(0,7,8)]+=tmp2_1;  
                                 EM_S[INDEX2(5,6,8)]+=tmp1_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp0_1;  
                                 EM_S[INDEX2(1,6,8)]+=tmp2_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp0_1;  
                                 EM_S[INDEX2(3,7,8)]+=tmp0_1;  
                                 EM_S[INDEX2(2,5,8)]+=tmp2_1;  
                                 EM_S[INDEX2(0,3,8)]+=tmp1_1;  
                                 EM_S[INDEX2(7,2,8)]+=tmp1_1;  
5321                                  EM_S[INDEX2(4,0,8)]+=tmp0_1;                                  EM_S[INDEX2(4,0,8)]+=tmp0_1;
5322                                    EM_S[INDEX2(5,0,8)]+=tmp1_1;
5323                                    EM_S[INDEX2(6,0,8)]+=tmp1_1;
5324                                    EM_S[INDEX2(7,0,8)]+=tmp2_1;
5325                                    EM_S[INDEX2(0,1,8)]+=tmp0_1;
5326                                    EM_S[INDEX2(1,1,8)]+=tmp3_1;
5327                                    EM_S[INDEX2(2,1,8)]+=tmp1_1;
5328                                    EM_S[INDEX2(3,1,8)]+=tmp0_1;
5329                                    EM_S[INDEX2(4,1,8)]+=tmp1_1;
5330                                    EM_S[INDEX2(5,1,8)]+=tmp0_1;
5331                                    EM_S[INDEX2(6,1,8)]+=tmp2_1;
5332                                    EM_S[INDEX2(7,1,8)]+=tmp1_1;
5333                                    EM_S[INDEX2(0,2,8)]+=tmp0_1;
5334                                  EM_S[INDEX2(1,2,8)]+=tmp1_1;                                  EM_S[INDEX2(1,2,8)]+=tmp1_1;
5335                                  EM_S[INDEX2(6,7,8)]+=tmp0_1;                                  EM_S[INDEX2(2,2,8)]+=tmp3_1;
5336                                    EM_S[INDEX2(3,2,8)]+=tmp0_1;
5337                                    EM_S[INDEX2(4,2,8)]+=tmp1_1;
5338                                    EM_S[INDEX2(5,2,8)]+=tmp2_1;
5339                                    EM_S[INDEX2(6,2,8)]+=tmp0_1;
5340                                    EM_S[INDEX2(7,2,8)]+=tmp1_1;
5341                                    EM_S[INDEX2(0,3,8)]+=tmp1_1;
5342                                    EM_S[INDEX2(1,3,8)]+=tmp0_1;
5343                                    EM_S[INDEX2(2,3,8)]+=tmp0_1;
5344                                  EM_S[INDEX2(3,3,8)]+=tmp3_1;                                  EM_S[INDEX2(3,3,8)]+=tmp3_1;
5345                                  EM_S[INDEX2(2,0,8)]+=tmp0_1;                                  EM_S[INDEX2(4,3,8)]+=tmp2_1;
5346                                  EM_S[INDEX2(7,6,8)]+=tmp0_1;                                  EM_S[INDEX2(5,3,8)]+=tmp1_1;
                                 EM_S[INDEX2(4,4,8)]+=tmp3_1;  
5347                                  EM_S[INDEX2(6,3,8)]+=tmp1_1;                                  EM_S[INDEX2(6,3,8)]+=tmp1_1;
5348                                    EM_S[INDEX2(7,3,8)]+=tmp0_1;
5349                                    EM_S[INDEX2(0,4,8)]+=tmp0_1;
5350                                    EM_S[INDEX2(1,4,8)]+=tmp1_1;
5351                                    EM_S[INDEX2(2,4,8)]+=tmp1_1;
5352                                    EM_S[INDEX2(3,4,8)]+=tmp2_1;
5353                                    EM_S[INDEX2(4,4,8)]+=tmp3_1;
5354                                    EM_S[INDEX2(5,4,8)]+=tmp0_1;
5355                                    EM_S[INDEX2(6,4,8)]+=tmp0_1;
5356                                    EM_S[INDEX2(7,4,8)]+=tmp1_1;
5357                                    EM_S[INDEX2(0,5,8)]+=tmp1_1;
5358                                  EM_S[INDEX2(1,5,8)]+=tmp0_1;                                  EM_S[INDEX2(1,5,8)]+=tmp0_1;
5359                                  EM_S[INDEX2(3,6,8)]+=tmp1_1;                                  EM_S[INDEX2(2,5,8)]+=tmp2_1;
5360                                  EM_S[INDEX2(2,2,8)]+=tmp3_1;                                  EM_S[INDEX2(3,5,8)]+=tmp1_1;
                                 EM_S[INDEX2(7,7,8)]+=tmp3_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp0_1;  
                                 EM_S[INDEX2(5,3,8)]+=tmp1_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp1_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp3_1;  
                                 EM_S[INDEX2(2,7,8)]+=tmp1_1;  
                                 EM_S[INDEX2(3,2,8)]+=tmp0_1;  
                                 EM_S[INDEX2(0,0,8)]+=tmp3_1;  
                                 EM_S[INDEX2(6,6,8)]+=tmp3_1;  
                                 EM_S[INDEX2(5,0,8)]+=tmp1_1;  
                                 EM_S[INDEX2(7,1,8)]+=tmp1_1;  
5361                                  EM_S[INDEX2(4,5,8)]+=tmp0_1;                                  EM_S[INDEX2(4,5,8)]+=tmp0_1;
                                 EM_S[INDEX2(0,4,8)]+=tmp0_1;  
5362                                  EM_S[INDEX2(5,5,8)]+=tmp3_1;                                  EM_S[INDEX2(5,5,8)]+=tmp3_1;
                                 EM_S[INDEX2(1,4,8)]+=tmp1_1;  
                                 EM_S[INDEX2(6,0,8)]+=tmp1_1;  
                                 EM_S[INDEX2(7,5,8)]+=tmp0_1;  
                                 EM_S[INDEX2(2,3,8)]+=tmp0_1;  
                                 EM_S[INDEX2(2,1,8)]+=tmp1_1;  
                                 EM_S[INDEX2(4,2,8)]+=tmp1_1;  
                                 EM_S[INDEX2(1,0,8)]+=tmp0_1;  
5363                                  EM_S[INDEX2(6,5,8)]+=tmp1_1;                                  EM_S[INDEX2(6,5,8)]+=tmp1_1;
5364                                  EM_S[INDEX2(3,5,8)]+=tmp1_1;                                  EM_S[INDEX2(7,5,8)]+=tmp0_1;
                                 EM_S[INDEX2(0,1,8)]+=tmp0_1;  
                                 EM_S[INDEX2(7,0,8)]+=tmp2_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp0_1;  
                                 EM_S[INDEX2(5,2,8)]+=tmp2_1;  
                                 EM_S[INDEX2(6,1,8)]+=tmp2_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp0_1;  
                                 EM_S[INDEX2(0,2,8)]+=tmp0_1;  
                                 EM_S[INDEX2(7,4,8)]+=tmp1_1;  
5365                                  EM_S[INDEX2(0,6,8)]+=tmp1_1;                                  EM_S[INDEX2(0,6,8)]+=tmp1_1;
5366                                  EM_S[INDEX2(6,2,8)]+=tmp0_1;                                  EM_S[INDEX2(1,6,8)]+=tmp2_1;
5367                                  EM_S[INDEX2(4,3,8)]+=tmp2_1;                                  EM_S[INDEX2(2,6,8)]+=tmp0_1;
5368                                    EM_S[INDEX2(3,6,8)]+=tmp1_1;
5369                                    EM_S[INDEX2(4,6,8)]+=tmp0_1;
5370                                    EM_S[INDEX2(5,6,8)]+=tmp1_1;
5371                                    EM_S[INDEX2(6,6,8)]+=tmp3_1;
5372                                    EM_S[INDEX2(7,6,8)]+=tmp0_1;
5373                                    EM_S[INDEX2(0,7,8)]+=tmp2_1;
5374                                  EM_S[INDEX2(1,7,8)]+=tmp1_1;                                  EM_S[INDEX2(1,7,8)]+=tmp1_1;
5375                                  EM_S[INDEX2(0,5,8)]+=tmp1_1;                                  EM_S[INDEX2(2,7,8)]+=tmp1_1;
5376                                  EM_S[INDEX2(3,4,8)]+=tmp2_1;                                  EM_S[INDEX2(3,7,8)]+=tmp0_1;
5377                                  EM_S[INDEX2(2,4,8)]+=tmp1_1;                                  EM_S[INDEX2(4,7,8)]+=tmp1_1;
5378                                    EM_S[INDEX2(5,7,8)]+=tmp0_1;
5379                                    EM_S[INDEX2(6,7,8)]+=tmp0_1;
5380                                    EM_S[INDEX2(7,7,8)]+=tmp3_1;
5381                              }                              }
5382                          }                          }
5383                          ///////////////                          ///////////////
# Line 5381  void Brick::assemblePDESingleReduced(Pas Line 5661  void Brick::assemblePDESingleReduced(Pas
5661                              add_EM_S=true;                              add_EM_S=true;
5662                              const double* A_p=const_cast<escript::Data*>(&A)->getSampleDataRO(e);                              const double* A_p=const_cast<escript::Data*>(&A)->getSampleDataRO(e);
5663                              const double A_00 = A_p[INDEX2(0,0,3)];                              const double A_00 = A_p[INDEX2(0,0,3)];
                             const double A_01 = A_p[INDEX2(0,1,3)];  
                             const double A_02 = A_p[INDEX2(0,2,3)];  
5664                              const double A_10 = A_p[INDEX2(1,0,3)];                              const double A_10 = A_p[INDEX2(1,0,3)];
                             const double A_11 = A_p[INDEX2(1,1,3)];  
                             const double A_12 = A_p[INDEX2(1,2,3)];  
5665                              const double A_20 = A_p[INDEX2(2,0,3)];                              const double A_20 = A_p[INDEX2(2,0,3)];
5666                                const double A_01 = A_p[INDEX2(0,1,3)];
5667                                const double A_11 = A_p[INDEX2(1,1,3)];
5668                              const double A_21 = A_p[INDEX2(2,1,3)];                              const double A_21 = A_p[INDEX2(2,1,3)];
5669                                const double A_02 = A_p[INDEX2(0,2,3)];
5670                                const double A_12 = A_p[INDEX2(1,2,3)];
5671                              const double A_22 = A_p[INDEX2(2,2,3)];                              const double A_22 = A_p[INDEX2(2,2,3)];
5672                              const double tmp0_0 = A_01 + A_10;                              const double tmp0_0 = A_01 + A_10;
5673                              const double tmp1_0 = A_02 + A_20;                              const double tmp1_0 = A_02 + A_20;
# Line 5416  void Brick::assemblePDESingleReduced(Pas Line 5696  void Brick::assemblePDESingleReduced(Pas
5696                              const double tmp16_1 = A_10*w9;                              const double tmp16_1 = A_10*w9;
5697                              const double tmp11_1 = tmp0_0*w9;                              const double tmp11_1 = tmp0_0*w9;
5698                              const double tmp17_1 = A_10*w1;                              const double tmp17_1 = A_10*w1;
5699                              EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;                              EM_S[INDEX2(0,0,8)]+=tmp0_1 + tmp22_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;
5700                              EM_S[INDEX2(4,7,8)]+=tmp10_1 + tmp11_1 + tmp1_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(1,0,8)]+=tmp17_1 + tmp20_1 + tmp23_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
5701                              EM_S[INDEX2(1,3,8)]+=tmp10_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp16_1 + tmp2_1 + tmp9_1;                              EM_S[INDEX2(2,0,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp1_1 + tmp22_1 + tmp2_1 + tmp5_1 + tmp9_1;
                             EM_S[INDEX2(6,4,8)]+=tmp10_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp16_1 + tmp2_1 + tmp9_1;  
5702                              EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp11_1 + tmp1_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(3,0,8)]+=tmp10_1 + tmp11_1 + tmp1_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
                             EM_S[INDEX2(5,4,8)]+=tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp4_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(0,7,8)]+=tmp10_1 + tmp11_1 + tmp15_1 + tmp18_1 + tmp3_1 + tmp8_1;  
                             EM_S[INDEX2(5,6,8)]+=tmp0_1 + tmp10_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp5_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(2,6,8)]+=tmp11_1 + tmp13_1 + tmp14_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;  
                             EM_S[INDEX2(1,6,8)]+=tmp0_1 + tmp10_1 + tmp18_1 + tmp22_1 + tmp3_1 + tmp8_1;  
                             EM_S[INDEX2(5,1,8)]+=tmp11_1 + tmp13_1 + tmp14_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;  
                             EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1;  
                             EM_S[INDEX2(2,5,8)]+=tmp0_1 + tmp10_1 + tmp15_1 + tmp23_1 + tmp3_1 + tmp8_1;  
                             EM_S[INDEX2(0,3,8)]+=tmp10_1 + tmp11_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(7,2,8)]+=tmp12_1 + tmp15_1 + tmp16_1 + tmp1_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;  
5703                              EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(4,0,8)]+=tmp0_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1;
5704                                EM_S[INDEX2(5,0,8)]+=tmp13_1 + tmp14_1 + tmp15_1 + tmp17_1 + tmp20_1 + tmp3_1 + tmp4_1 + tmp8_1;
5705                                EM_S[INDEX2(6,0,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp18_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1;
5706                                EM_S[INDEX2(7,0,8)]+=tmp10_1 + tmp11_1 + tmp15_1 + tmp18_1 + tmp3_1 + tmp8_1;
5707                                EM_S[INDEX2(0,1,8)]+=tmp12_1 + tmp16_1 + tmp19_1 + tmp21_1 + tmp23_1 + tmp4_1 + tmp8_1 + tmp9_1;
5708                                EM_S[INDEX2(1,1,8)]+=tmp11_1 + tmp15_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;
5709                                EM_S[INDEX2(2,1,8)]+=tmp0_1 + tmp10_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp5_1 + tmp8_1 + tmp9_1;
5710                                EM_S[INDEX2(3,1,8)]+=tmp10_1 + tmp15_1 + tmp17_1 + tmp1_1 + tmp20_1 + tmp2_1 + tmp5_1 + tmp9_1;
5711                                EM_S[INDEX2(4,1,8)]+=tmp12_1 + tmp13_1 + tmp14_1 + tmp16_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp8_1;
5712                                EM_S[INDEX2(5,1,8)]+=tmp11_1 + tmp13_1 + tmp14_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;
5713                                EM_S[INDEX2(6,1,8)]+=tmp0_1 + tmp10_1 + tmp18_1 + tmp22_1 + tmp3_1 + tmp8_1;
5714                                EM_S[INDEX2(7,1,8)]+=tmp10_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;
5715                                EM_S[INDEX2(0,2,8)]+=tmp10_1 + tmp13_1 + tmp14_1 + tmp17_1 + tmp20_1 + tmp22_1 + tmp2_1 + tmp9_1;
5716                              EM_S[INDEX2(1,2,8)]+=tmp0_1 + tmp10_1 + tmp13_1 + tmp14_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(1,2,8)]+=tmp0_1 + tmp10_1 + tmp13_1 + tmp14_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
5717                              EM_S[INDEX2(6,7,8)]+=tmp17_1 + tmp20_1 + tmp23_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(2,2,8)]+=tmp11_1 + tmp18_1 + tmp22_1 + tmp2_1 + tmp4_1 + tmp9_1;
5718                                EM_S[INDEX2(3,2,8)]+=tmp12_1 + tmp16_1 + tmp18_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
5719                                EM_S[INDEX2(4,2,8)]+=tmp10_1 + tmp17_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp23_1 + tmp2_1 + tmp3_1;
5720                                EM_S[INDEX2(5,2,8)]+=tmp0_1 + tmp10_1 + tmp15_1 + tmp23_1 + tmp3_1 + tmp8_1;
5721                                EM_S[INDEX2(6,2,8)]+=tmp11_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1;
5722                                EM_S[INDEX2(7,2,8)]+=tmp12_1 + tmp15_1 + tmp16_1 + tmp1_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;
5723                                EM_S[INDEX2(0,3,8)]+=tmp10_1 + tmp11_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp8_1 + tmp9_1;
5724                                EM_S[INDEX2(1,3,8)]+=tmp10_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp16_1 + tmp2_1 + tmp9_1;
5725                                EM_S[INDEX2(2,3,8)]+=tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp4_1 + tmp8_1 + tmp9_1;
5726                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp15_1 + tmp18_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp15_1 + tmp18_1 + tmp2_1 + tmp4_1 + tmp9_1;
5727                              EM_S[INDEX2(2,0,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp1_1 + tmp22_1 + tmp2_1 + tmp5_1 + tmp9_1;                              EM_S[INDEX2(4,3,8)]+=tmp10_1 + tmp11_1 + tmp22_1 + tmp23_1 + tmp3_1 + tmp8_1;
5728                              EM_S[INDEX2(7,6,8)]+=tmp12_1 + tmp16_1 + tmp19_1 + tmp21_1 + tmp23_1 + tmp4_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(5,3,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp23_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;
                             EM_S[INDEX2(4,4,8)]+=tmp0_1 + tmp15_1 + tmp18_1 + tmp2_1 + tmp4_1 + tmp9_1;  
5729                              EM_S[INDEX2(6,3,8)]+=tmp17_1 + tmp1_1 + tmp20_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;                              EM_S[INDEX2(6,3,8)]+=tmp17_1 + tmp1_1 + tmp20_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;
5730                                EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;
5731                                EM_S[INDEX2(0,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;
5732                                EM_S[INDEX2(1,4,8)]+=tmp17_1 + tmp1_1 + tmp20_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;
5733                                EM_S[INDEX2(2,4,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp23_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;
5734                                EM_S[INDEX2(3,4,8)]+=tmp10_1 + tmp11_1 + tmp22_1 + tmp23_1 + tmp3_1 + tmp8_1;
5735                                EM_S[INDEX2(4,4,8)]+=tmp0_1 + tmp15_1 + tmp18_1 + tmp2_1 + tmp4_1 + tmp9_1;
5736                                EM_S[INDEX2(5,4,8)]+=tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp4_1 + tmp8_1 + tmp9_1;
5737                                EM_S[INDEX2(6,4,8)]+=tmp10_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp16_1 + tmp2_1 + tmp9_1;
5738                                EM_S[INDEX2(7,4,8)]+=tmp10_1 + tmp11_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp8_1 + tmp9_1;
5739                                EM_S[INDEX2(0,5,8)]+=tmp12_1 + tmp15_1 + tmp16_1 + tmp1_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;
5740                              EM_S[INDEX2(1,5,8)]+=tmp11_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(1,5,8)]+=tmp11_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1;
5741                              EM_S[INDEX2(3,6,8)]+=tmp12_1 + tmp13_1 + tmp14_1 + tmp16_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp8_1;                              EM_S[INDEX2(2,5,8)]+=tmp0_1 + tmp10_1 + tmp15_1 + tmp23_1 + tmp3_1 + tmp8_1;
5742                              EM_S[INDEX2(2,2,8)]+=tmp11_1 + tmp18_1 + tmp22_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(3,5,8)]+=tmp10_1 + tmp17_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp23_1 + tmp2_1 + tmp3_1;
                             EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp22_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;  
                             EM_S[INDEX2(5,7,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp1_1 + tmp22_1 + tmp2_1 + tmp5_1 + tmp9_1;  
                             EM_S[INDEX2(5,3,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp23_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;  
                             EM_S[INDEX2(4,1,8)]+=tmp12_1 + tmp13_1 + tmp14_1 + tmp16_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp8_1;  
                             EM_S[INDEX2(1,1,8)]+=tmp11_1 + tmp15_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;  
                             EM_S[INDEX2(2,7,8)]+=tmp13_1 + tmp14_1 + tmp15_1 + tmp17_1 + tmp20_1 + tmp3_1 + tmp4_1 + tmp8_1;  
                             EM_S[INDEX2(3,2,8)]+=tmp12_1 + tmp16_1 + tmp18_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(0,0,8)]+=tmp0_1 + tmp22_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;  
                             EM_S[INDEX2(6,6,8)]+=tmp11_1 + tmp15_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;  
                             EM_S[INDEX2(5,0,8)]+=tmp13_1 + tmp14_1 + tmp15_1 + tmp17_1 + tmp20_1 + tmp3_1 + tmp4_1 + tmp8_1;  
                             EM_S[INDEX2(7,1,8)]+=tmp10_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;  
5743                              EM_S[INDEX2(4,5,8)]+=tmp12_1 + tmp16_1 + tmp18_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(4,5,8)]+=tmp12_1 + tmp16_1 + tmp18_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
                             EM_S[INDEX2(0,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;  
5744                              EM_S[INDEX2(5,5,8)]+=tmp11_1 + tmp18_1 + tmp22_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(5,5,8)]+=tmp11_1 + tmp18_1 + tmp22_1 + tmp2_1 + tmp4_1 + tmp9_1;
                             EM_S[INDEX2(1,4,8)]+=tmp17_1 + tmp1_1 + tmp20_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;  
                             EM_S[INDEX2(6,0,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp18_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(7,5,8)]+=tmp10_1 + tmp13_1 + tmp14_1 + tmp17_1 + tmp20_1 + tmp22_1 + tmp2_1 + tmp9_1;  
                             EM_S[INDEX2(2,3,8)]+=tmp17_1 + tmp18_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp4_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(2,1,8)]+=tmp0_1 + tmp10_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp5_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(4,2,8)]+=tmp10_1 + tmp17_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp23_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(1,0,8)]+=tmp17_1 + tmp20_1 + tmp23_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;  
5745                              EM_S[INDEX2(6,5,8)]+=tmp0_1 + tmp10_1 + tmp13_1 + tmp14_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(6,5,8)]+=tmp0_1 + tmp10_1 + tmp13_1 + tmp14_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
5746                              EM_S[INDEX2(3,5,8)]+=tmp10_1 + tmp17_1 + tmp19_1 + tmp20_1 + tmp21_1 + tmp23_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(7,5,8)]+=tmp10_1 + tmp13_1 + tmp14_1 + tmp17_1 + tmp20_1 + tmp22_1 + tmp2_1 + tmp9_1;
                             EM_S[INDEX2(0,1,8)]+=tmp12_1 + tmp16_1 + tmp19_1 + tmp21_1 + tmp23_1 + tmp4_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(7,0,8)]+=tmp10_1 + tmp11_1 + tmp15_1 + tmp18_1 + tmp3_1 + tmp8_1;  
                             EM_S[INDEX2(4,6,8)]+=tmp10_1 + tmp15_1 + tmp17_1 + tmp1_1 + tmp20_1 + tmp2_1 + tmp5_1 + tmp9_1;  
                             EM_S[INDEX2(5,2,8)]+=tmp0_1 + tmp10_1 + tmp15_1 + tmp23_1 + tmp3_1 + tmp8_1;  
                             EM_S[INDEX2(6,1,8)]+=tmp0_1 + tmp10_1 + tmp18_1 + tmp22_1 + tmp3_1 + tmp8_1;  
                             EM_S[INDEX2(3,1,8)]+=tmp10_1 + tmp15_1 + tmp17_1 + tmp1_1 + tmp20_1 + tmp2_1 + tmp5_1 + tmp9_1;  
                             EM_S[INDEX2(0,2,8)]+=tmp10_1 + tmp13_1 + tmp14_1 + tmp17_1 + tmp20_1 + tmp22_1 + tmp2_1 + tmp9_1;  
                             EM_S[INDEX2(7,4,8)]+=tmp10_1 + tmp11_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp8_1 + tmp9_1;  
5747                              EM_S[INDEX2(0,6,8)]+=tmp10_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;                              EM_S[INDEX2(0,6,8)]+=tmp10_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;
5748                              EM_S[INDEX2(6,2,8)]+=tmp11_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(1,6,8)]+=tmp0_1 + tmp10_1 + tmp18_1 + tmp22_1 + tmp3_1 + tmp8_1;
5749                              EM_S[INDEX2(4,3,8)]+=tmp10_1 + tmp11_1 + tmp22_1 + tmp23_1 + tmp3_1 + tmp8_1;                              EM_S[INDEX2(2,6,8)]+=tmp11_1 + tmp13_1 + tmp14_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;
5750                                EM_S[INDEX2(3,6,8)]+=tmp12_1 + tmp13_1 + tmp14_1 + tmp16_1 + tmp22_1 + tmp3_1 + tmp4_1 + tmp8_1;
5751                                EM_S[INDEX2(4,6,8)]+=tmp10_1 + tmp15_1 + tmp17_1 + tmp1_1 + tmp20_1 + tmp2_1 + tmp5_1 + tmp9_1;
5752                                EM_S[INDEX2(5,6,8)]+=tmp0_1 + tmp10_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp5_1 + tmp8_1 + tmp9_1;
5753                                EM_S[INDEX2(6,6,8)]+=tmp11_1 + tmp15_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;
5754                                EM_S[INDEX2(7,6,8)]+=tmp12_1 + tmp16_1 + tmp19_1 + tmp21_1 + tmp23_1 + tmp4_1 + tmp8_1 + tmp9_1;
5755                                EM_S[INDEX2(0,7,8)]+=tmp10_1 + tmp11_1 + tmp15_1 + tmp18_1 + tmp3_1 + tmp8_1;
5756                              EM_S[INDEX2(1,7,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp18_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(1,7,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp18_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1;
5757                              EM_S[INDEX2(0,5,8)]+=tmp12_1 + tmp15_1 + tmp16_1 + tmp1_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;                              EM_S[INDEX2(2,7,8)]+=tmp13_1 + tmp14_1 + tmp15_1 + tmp17_1 + tmp20_1 + tmp3_1 + tmp4_1 + tmp8_1;
5758                              EM_S[INDEX2(3,4,8)]+=tmp10_1 + tmp11_1 + tmp22_1 + tmp23_1 + tmp3_1 + tmp8_1;                              EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp13_1 + tmp14_1 + tmp19_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1;
5759                              EM_S[INDEX2(2,4,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp23_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;                              EM_S[INDEX2(4,7,8)]+=tmp10_1 + tmp11_1 + tmp1_1 + tmp5_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
5760                                EM_S[INDEX2(5,7,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp1_1 + tmp22_1 + tmp2_1 + tmp5_1 + tmp9_1;
5761                                EM_S[INDEX2(6,7,8)]+=tmp17_1 + tmp20_1 + tmp23_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;
5762                                EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp22_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;
5763                          }                          }
5764                          ///////////////                          ///////////////
5765                          // process B //                          // process B //
# Line 5496  void Brick::assemblePDESingleReduced(Pas Line 5776  void Brick::assemblePDESingleReduced(Pas
5776                              const double tmp5_1 = B_2*w17;                              const double tmp5_1 = B_2*w17;
5777                              const double tmp1_1 = B_2*w14;                              const double tmp1_1 = B_2*w14;
5778                              const double tmp0_1 = B_1*w13;                              const double tmp0_1 = B_1*w13;
5779                              EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(0,0,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5780                              EM_S[INDEX2(4,7,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(1,0,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5781                              EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(2,0,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
                             EM_S[INDEX2(6,4,8)]+=tmp0_1 + tmp1_1 + tmp4_1;  
5782                              EM_S[INDEX2(3,0,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(3,0,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
                             EM_S[INDEX2(5,4,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(0,7,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(5,6,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(1,6,8)]+=tmp2_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(5,1,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp2_1 + tmp5_1;  
                             EM_S[INDEX2(2,5,8)]+=tmp0_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(0,3,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(7,2,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
5783                              EM_S[INDEX2(4,0,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(4,0,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
5784                                EM_S[INDEX2(5,0,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
5785                                EM_S[INDEX2(6,0,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5786                                EM_S[INDEX2(7,0,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5787                                EM_S[INDEX2(0,1,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5788                                EM_S[INDEX2(1,1,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5789                                EM_S[INDEX2(2,1,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
5790                                EM_S[INDEX2(3,1,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
5791                                EM_S[INDEX2(4,1,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
5792                                EM_S[INDEX2(5,1,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
5793                                EM_S[INDEX2(6,1,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5794                                EM_S[INDEX2(7,1,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5795                                EM_S[INDEX2(0,2,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5796                              EM_S[INDEX2(1,2,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(1,2,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5797                              EM_S[INDEX2(6,7,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
5798                                EM_S[INDEX2(3,2,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
5799                                EM_S[INDEX2(4,2,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
5800                                EM_S[INDEX2(5,2,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
5801                                EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5802                                EM_S[INDEX2(7,2,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5803                                EM_S[INDEX2(0,3,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5804                                EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5805                                EM_S[INDEX2(2,3,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
5806                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
5807                              EM_S[INDEX2(2,0,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,3,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
5808                              EM_S[INDEX2(7,6,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(5,3,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
                             EM_S[INDEX2(4,4,8)]+=tmp1_1 + tmp3_1 + tmp4_1;  
5809                              EM_S[INDEX2(6,3,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(6,3,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5810                                EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5811                                EM_S[INDEX2(0,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5812                                EM_S[INDEX2(1,4,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5813                                EM_S[INDEX2(2,4,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
5814                                EM_S[INDEX2(3,4,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
5815                                EM_S[INDEX2(4,4,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
5816                                EM_S[INDEX2(5,4,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
5817                                EM_S[INDEX2(6,4,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5818                                EM_S[INDEX2(7,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5819                                EM_S[INDEX2(0,5,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5820                              EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5821                              EM_S[INDEX2(3,6,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(2,5,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
5822                              EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(3,5,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
                             EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
                             EM_S[INDEX2(5,7,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(5,3,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(4,1,8)]+=tmp1_1 + tmp3_1 + tmp4_1;  
                             EM_S[INDEX2(1,1,8)]+=tmp2_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(2,7,8)]+=tmp0_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(3,2,8)]+=tmp0_1 + tmp2_1 + tmp5_1;  
                             EM_S[INDEX2(0,0,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp1_1 + tmp4_1;  
                             EM_S[INDEX2(5,0,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(7,1,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
5823                              EM_S[INDEX2(4,5,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(4,5,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
                             EM_S[INDEX2(0,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
5824                              EM_S[INDEX2(5,5,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(5,5,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
                             EM_S[INDEX2(1,4,8)]+=tmp2_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(6,0,8)]+=tmp0_1 + tmp1_1 + tmp4_1;  
                             EM_S[INDEX2(7,5,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
                             EM_S[INDEX2(2,3,8)]+=tmp0_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(2,1,8)]+=tmp0_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(4,2,8)]+=tmp1_1 + tmp3_1 + tmp4_1;  
                             EM_S[INDEX2(1,0,8)]+=tmp2_1 + tmp3_1 + tmp5_1;  
5825                              EM_S[INDEX2(6,5,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(6,5,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5826                              EM_S[INDEX2(3,5,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(7,5,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
                             EM_S[INDEX2(0,1,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(7,0,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
                             EM_S[INDEX2(4,6,8)]+=tmp1_1 + tmp3_1 + tmp4_1;  
                             EM_S[INDEX2(5,2,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(6,1,8)]+=tmp0_1 + tmp1_1 + tmp4_1;  
                             EM_S[INDEX2(3,1,8)]+=tmp0_1 + tmp2_1 + tmp5_1;  
                             EM_S[INDEX2(0,2,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(7,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
5827                              EM_S[INDEX2(0,6,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(0,6,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5828                              EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(1,6,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5829                              EM_S[INDEX2(4,3,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
5830                                EM_S[INDEX2(3,6,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
5831                                EM_S[INDEX2(4,6,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
5832                                EM_S[INDEX2(5,6,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
5833                                EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5834                                EM_S[INDEX2(7,6,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5835                                EM_S[INDEX2(0,7,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5836                              EM_S[INDEX2(1,7,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(1,7,8)]+=tmp2_1 + tmp3_1 + tmp5_1;
5837                              EM_S[INDEX2(0,5,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(2,7,8)]+=tmp0_1 + tmp4_1 + tmp5_1;
5838                              EM_S[INDEX2(3,4,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp2_1 + tmp5_1;
5839                              EM_S[INDEX2(2,4,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,7,8)]+=tmp1_1 + tmp3_1 + tmp4_1;
5840                                EM_S[INDEX2(5,7,8)]+=tmp1_1 + tmp2_1 + tmp3_1;
5841                                EM_S[INDEX2(6,7,8)]+=tmp0_1 + tmp1_1 + tmp4_1;
5842                                EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5843                          }                          }
5844                          ///////////////                          ///////////////
5845                          // process C //                          // process C //
# Line 5576  void Brick::assemblePDESingleReduced(Pas Line 5856  void Brick::assemblePDESingleReduced(Pas
5856                              const double tmp1_1 = C_2*w17;                              const double tmp1_1 = C_2*w17;
5857                              const double tmp3_1 = C_2*w14;                              const double tmp3_1 = C_2*w14;
5858                              const double tmp0_1 = C_1*w13;                              const double tmp0_1 = C_1*w13;
5859                              EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(0,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
5860                              EM_S[INDEX2(4,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(1,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
5861                              EM_S[INDEX2(1,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(2,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
                             EM_S[INDEX2(6,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
5862                              EM_S[INDEX2(3,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(3,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
                             EM_S[INDEX2(5,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(0,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(5,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(1,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(5,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
                             EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(2,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;  
                             EM_S[INDEX2(0,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
                             EM_S[INDEX2(7,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;  
5863                              EM_S[INDEX2(4,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
5864                                EM_S[INDEX2(5,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
5865                                EM_S[INDEX2(6,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
5866                                EM_S[INDEX2(7,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;
5867                                EM_S[INDEX2(0,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5868                                EM_S[INDEX2(1,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5869                                EM_S[INDEX2(2,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5870                                EM_S[INDEX2(3,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5871                                EM_S[INDEX2(4,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5872                                EM_S[INDEX2(5,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5873                                EM_S[INDEX2(6,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5874                                EM_S[INDEX2(7,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;
5875                                EM_S[INDEX2(0,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5876                              EM_S[INDEX2(1,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(1,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5877                              EM_S[INDEX2(6,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5878                                EM_S[INDEX2(3,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5879                                EM_S[INDEX2(4,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5880                                EM_S[INDEX2(5,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5881                                EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5882                                EM_S[INDEX2(7,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;
5883                                EM_S[INDEX2(0,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5884                                EM_S[INDEX2(1,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5885                                EM_S[INDEX2(2,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5886                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5887                              EM_S[INDEX2(2,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5888                              EM_S[INDEX2(7,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(5,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
                             EM_S[INDEX2(4,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
5889                              EM_S[INDEX2(6,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(6,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5890                                EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;
5891                                EM_S[INDEX2(0,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5892                                EM_S[INDEX2(1,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5893                                EM_S[INDEX2(2,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5894                                EM_S[INDEX2(3,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5895                                EM_S[INDEX2(4,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5896                                EM_S[INDEX2(5,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5897                                EM_S[INDEX2(6,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5898                                EM_S[INDEX2(7,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;
5899                                EM_S[INDEX2(0,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
5900                              EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
5901                              EM_S[INDEX2(3,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(2,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
5902                              EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(3,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
                             EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(5,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(5,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
                             EM_S[INDEX2(4,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
                             EM_S[INDEX2(1,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
                             EM_S[INDEX2(2,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(3,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;  
                             EM_S[INDEX2(0,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(5,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(7,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
5903                              EM_S[INDEX2(4,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(4,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
                             EM_S[INDEX2(0,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
5904                              EM_S[INDEX2(5,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(5,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
                             EM_S[INDEX2(1,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(6,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(7,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;  
                             EM_S[INDEX2(2,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
                             EM_S[INDEX2(2,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
                             EM_S[INDEX2(4,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;  
                             EM_S[INDEX2(1,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;  
5905                              EM_S[INDEX2(6,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(6,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
5906                              EM_S[INDEX2(3,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(7,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;
                             EM_S[INDEX2(0,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
                             EM_S[INDEX2(7,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(4,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;  
                             EM_S[INDEX2(5,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;  
                             EM_S[INDEX2(6,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
                             EM_S[INDEX2(3,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;  
                             EM_S[INDEX2(0,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;  
                             EM_S[INDEX2(7,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;  
5907                              EM_S[INDEX2(0,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(0,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5908                              EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(1,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5909                              EM_S[INDEX2(4,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5910                                EM_S[INDEX2(3,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5911                                EM_S[INDEX2(4,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5912                                EM_S[INDEX2(5,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5913                                EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5914                                EM_S[INDEX2(7,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;
5915                                EM_S[INDEX2(0,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5916                              EM_S[INDEX2(1,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(1,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5917                              EM_S[INDEX2(0,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(2,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5918                              EM_S[INDEX2(3,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5919                              EM_S[INDEX2(2,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5920                                EM_S[INDEX2(5,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5921                                EM_S[INDEX2(6,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5922                                EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;
5923                          }                          }
5924                          ///////////////                          ///////////////
5925                          // process D //                          // process D //
# Line 5647  void Brick::assemblePDESingleReduced(Pas Line 5927  void Brick::assemblePDESingleReduced(Pas
5927                          if (!D.isEmpty()) {                          if (!D.isEmpty()) {
5928                              add_EM_S=true;                              add_EM_S=true;
5929                              const double* D_p=const_cast<escript::Data*>(&D)->getSampleDataRO(e);                              const double* D_p=const_cast<escript::Data*>(&D)->getSampleDataRO(e);
5930                              const double D_0 = D_p[0];                              const double tmp0_1 = D_p[0]*w18;
5931                              const double tmp0_1 = D_0*w18;                              EM_S[INDEX2(0,0,8)]+=tmp0_1;
5932                              EM_S[INDEX2(7,3,8)]+=tmp0_1;                              EM_S[INDEX2(1,0,8)]+=tmp0_1;
5933                              EM_S[INDEX2(4,7,8)]+=tmp0_1;                              EM_S[INDEX2(2,0,8)]+=tmp0_1;
                             EM_S[INDEX2(1,3,8)]+=tmp0_1;  
                             EM_S[INDEX2(6,4,8)]+=tmp0_1;  
5934                              EM_S[INDEX2(3,0,8)]+=tmp0_1;                              EM_S[INDEX2(3,0,8)]+=tmp0_1;
                             EM_S[INDEX2(5,4,8)]+=tmp0_1;  
                             EM_S[INDEX2(0,7,8)]+=tmp0_1;  
                             EM_S[INDEX2(5,6,8)]+=tmp0_1;  
                             EM_S[INDEX2(2,6,8)]+=tmp0_1;  
                             EM_S[INDEX2(1,6,8)]+=tmp0_1;  
                             EM_S[INDEX2(5,1,8)]+=tmp0_1;  
                             EM_S[INDEX2(3,7,8)]+=tmp0_1;  
                             EM_S[INDEX2(2,5,8)]+=tmp0_1;  
                             EM_S[INDEX2(0,3,8)]+=tmp0_1;  
                             EM_S[INDEX2(7,2,8)]+=tmp0_1;  
5935                              EM_S[INDEX2(4,0,8)]+=tmp0_1;                              EM_S[INDEX2(4,0,8)]+=tmp0_1;
5936                                EM_S[INDEX2(5,0,8)]+=tmp0_1;
5937                                EM_S[INDEX2(6,0,8)]+=tmp0_1;
5938                                EM_S[INDEX2(7,0,8)]+=tmp0_1;
5939                                EM_S[INDEX2(0,1,8)]+=tmp0_1;
5940                                EM_S[INDEX2(1,1,8)]+=tmp0_1;
5941                                EM_S[INDEX2(2,1,8)]+=tmp0_1;
5942                                EM_S[INDEX2(3,1,8)]+=tmp0_1;
5943                                EM_S[INDEX2(4,1,8)]+=tmp0_1;
5944                                EM_S[INDEX2(5,1,8)]+=tmp0_1;
5945                                EM_S[INDEX2(6,1,8)]+=tmp0_1;
5946                                EM_S[INDEX2(7,1,8)]+=tmp0_1;
5947                                EM_S[INDEX2(0,2,8)]+=tmp0_1;
5948                              EM_S[INDEX2(1,2,8)]+=tmp0_1;                              EM_S[INDEX2(1,2,8)]+=tmp0_1;
5949                              EM_S[INDEX2(6,7,8)]+=tmp0_1;                              EM_S[INDEX2(2,2,8)]+=tmp0_1;
5950                                EM_S[INDEX2(3,2,8)]+=tmp0_1;
5951                                EM_S[INDEX2(4,2,8)]+=tmp0_1;
5952                                EM_S[INDEX2(5,2,8)]+=tmp0_1;
5953                                EM_S[INDEX2(6,2,8)]+=tmp0_1;
5954                                EM_S[INDEX2(7,2,8)]+=tmp0_1;
5955                                EM_S[INDEX2(0,3,8)]+=tmp0_1;
5956                                EM_S[INDEX2(1,3,8)]+=tmp0_1;
5957                                EM_S[INDEX2(2,3,8)]+=tmp0_1;
5958                              EM_S[INDEX2(3,3,8)]+=tmp0_1;                              EM_S[INDEX2(3,3,8)]+=tmp0_1;
5959                              EM_S[INDEX2(2,0,8)]+=tmp0_1;                              EM_S[INDEX2(4,3,8)]+=tmp0_1;
5960                              EM_S[INDEX2(7,6,8)]+=tmp0_1;                              EM_S[INDEX2(5,3,8)]+=tmp0_1;
                             EM_S[INDEX2(4,4,8)]+=tmp0_1;  
5961                              EM_S[INDEX2(6,3,8)]+=tmp0_1;                              EM_S[INDEX2(6,3,8)]+=tmp0_1;
5962                                EM_S[INDEX2(7,3,8)]+=tmp0_1;
5963                                EM_S[INDEX2(0,4,8)]+=tmp0_1;
5964                                EM_S[INDEX2(1,4,8)]+=tmp0_1;
5965                                EM_S[INDEX2(2,4,8)]+=tmp0_1;
5966                                EM_S[INDEX2(3,4,8)]+=tmp0_1;
5967                                EM_S[INDEX2(4,4,8)]+=tmp0_1;
5968                                EM_S[INDEX2(5,4,8)]+=tmp0_1;
5969                                EM_S[INDEX2(6,4,8)]+=tmp0_1;
5970                                EM_S[INDEX2(7,4,8)]+=tmp0_1;
5971                                EM_S[INDEX2(0,5,8)]+=tmp0_1;
5972                              EM_S[INDEX2(1,5,8)]+=tmp0_1;                              EM_S[INDEX2(1,5,8)]+=tmp0_1;
5973                              EM_S[INDEX2(3,6,8)]+=tmp0_1;                              EM_S[INDEX2(2,5,8)]+=tmp0_1;
5974                              EM_S[INDEX2(2,2,8)]+=tmp0_1;                              EM_S[INDEX2(3,5,8)]+=tmp0_1;
                             EM_S[INDEX2(7,7,8)]+=tmp0_1;  
                             EM_S[INDEX2(5,7,8)]+=tmp0_1;  
                             EM_S[INDEX2(5,3,8)]+=tmp0_1;  
                             EM_S[INDEX2(4,1,8)]+=tmp0_1;  
                             EM_S[INDEX2(1,1,8)]+=tmp0_1;  
                             EM_S[INDEX2(2,7,8)]+=tmp0_1;  
                             EM_S[INDEX2(3,2,8)]+=tmp0_1;  
                             EM_S[INDEX2(0,0,8)]+=tmp0_1;  
                             EM_S[INDEX2(6,6,8)]+=tmp0_1;  
                             EM_S[INDEX2(5,0,8)]+=tmp0_1;  
                             EM_S[INDEX2(7,1,8)]+=tmp0_1;  
5975                              EM_S[INDEX2(4,5,8)]+=tmp0_1;                              EM_S[INDEX2(4,5,8)]+=tmp0_1;
                             EM_S[INDEX2(0,4,8)]+=tmp0_1;  
5976                              EM_S[INDEX2(5,5,8)]+=tmp0_1;                              EM_S[INDEX2(5,5,8)]+=tmp0_1;
                             EM_S[INDEX2(1,4,8)]+=tmp0_1;  
                             EM_S[INDEX2(6,0,8)]+=tmp0_1;  
                             EM_S[INDEX2(7,5,8)]+=tmp0_1;  
                             EM_S[INDEX2(2,3,8)]+=tmp0_1;  
                             EM_S[INDEX2(2,1,8)]+=tmp0_1;  
                             EM_S[INDEX2(4,2,8)]+=tmp0_1;  
                             EM_S[INDEX2(1,0,8)]+=tmp0_1;  
5977                              EM_S[INDEX2(6,5,8)]+=tmp0_1;                              EM_S[INDEX2(6,5,8)]+=tmp0_1;
5978                              EM_S[INDEX2(3,5,8)]+=tmp0_1;                              EM_S[INDEX2(7,5,8)]+=tmp0_1;
                             EM_S[INDEX2(0,1,8)]+=tmp0_1;  
                             EM_S[INDEX2(7,0,8)]+=tmp0_1;  
                             EM_S[INDEX2(4,6,8)]+=tmp0_1;  
                             EM_S[INDEX2(5,2,8)]+=tmp0_1;  
                             EM_S[INDEX2(6,1,8)]+=tmp0_1;  
                             EM_S[INDEX2(3,1,8)]+=tmp0_1;  
                             EM_S[INDEX2(0,2,8)]+=tmp0_1;  
                             EM_S[INDEX2(7,4,8)]+=tmp0_1;  
5979                              EM_S[INDEX2(0,6,8)]+=tmp0_1;                              EM_S[INDEX2(0,6,8)]+=tmp0_1;
5980                              EM_S[INDEX2(6,2,8)]+=tmp0_1;                              EM_S[INDEX2(1,6,8)]+=tmp0_1;
5981                              EM_S[INDEX2(4,3,8)]+=tmp0_1;                              EM_S[INDEX2(2,6,8)]+=tmp0_1;
5982                                EM_S[INDEX2(3,6,8)]+=tmp0_1;
5983                                EM_S[INDEX2(4,6,8)]+=tmp0_1;
5984                                EM_S[INDEX2(5,6,8)]+=tmp0_1;
5985                                EM_S[INDEX2(6,6,8)]+=tmp0_1;
5986                                EM_S[INDEX2(7,6,8)]+=tmp0_1;
5987                                EM_S[INDEX2(0,7,8)]+=tmp0_1;
5988                              EM_S[INDEX2(1,7,8)]+=tmp0_1;                              EM_S[INDEX2(1,7,8)]+=tmp0_1;
5989                              EM_S[INDEX2(0,5,8)]+=tmp0_1;                              EM_S[INDEX2(2,7,8)]+=tmp0_1;
5990                              EM_S[INDEX2(3,4,8)]+=tmp0_1;                              EM_S[INDEX2(3,7,8)]+=tmp0_1;
5991                              EM_S[INDEX2(2,4,8)]+=tmp0_1;                              EM_S[INDEX2(4,7,8)]+=tmp0_1;
5992                                EM_S[INDEX2(5,7,8)]+=tmp0_1;
5993                                EM_S[INDEX2(6,7,8)]+=tmp0_1;
5994                                EM_S[INDEX2(7,7,8)]+=tmp0_1;
5995                          }                          }
5996                          ///////////////                          ///////////////
5997                          // process X //                          // process X //
# Line 9391  void Brick::assemblePDEBoundarySingle(Pa Line 9670  void Brick::assemblePDEBoundarySingle(Pa
9670      const double h0 = m_l0/m_gNE0;      const double h0 = m_l0/m_gNE0;
9671      const double h1 = m_l1/m_gNE1;      const double h1 = m_l1/m_gNE1;
9672      const double h2 = m_l2/m_gNE2;      const double h2 = m_l2/m_gNE2;
     /* GENERATOR SNIP_PDEBC_SINGLE_PRE TOP */  
9673      const double w0 = 0.0018607582807716854616*h1*h2;      const double w0 = 0.0018607582807716854616*h1*h2;
9674      const double w1 = 0.025917019497006092316*h1*h2;      const double w1 = 0.025917019497006092316*h1*h2;
9675      const double w2 = 0.0069444444444444444444*h1*h2;      const double w2 = 0.0069444444444444444444*h1*h2;
# Line 9428  void Brick::assemblePDEBoundarySingle(Pa Line 9706  void Brick::assemblePDEBoundarySingle(Pa
9706      const double w33 = 0.041666666666666666667*h0*h1;      const double w33 = 0.041666666666666666667*h0*h1;
9707      const double w34 = 0.01116454968463011277*h0*h1;      const double w34 = 0.01116454968463011277*h0*h1;
9708      const double w35 = 0.25*h0*h1;      const double w35 = 0.25*h0*h1;
     /* GENERATOR SNIP_PDEBC_SINGLE_PRE BOTTOM */  
9709      const bool add_EM_S=!d.isEmpty();      const bool add_EM_S=!d.isEmpty();
9710      const bool add_EM_F=!y.isEmpty();      const bool add_EM_F=!y.isEmpty();
9711      rhs.requireWrite();      rhs.requireWrite();
# Line 9436  void Brick::assemblePDEBoundarySingle(Pa Line 9713  void Brick::assemblePDEBoundarySingle(Pa
9713      {      {
9714          if (m_faceOffset[0] > -1) {          if (m_faceOffset[0] > -1) {
9715              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring
9716  #pragma omp for nowait  #pragma omp for
9717                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {
9718                      for (index_t k1=0; k1<m_NE1; ++k1) {                      for (index_t k1=0; k1<m_NE1; ++k1) {
9719                          vector<double> EM_S(8*8, 0);                          vector<double> EM_S(8*8, 0);
9720                          vector<double> EM_F(8, 0);                          vector<double> EM_F(8, 0);
9721                          const index_t e = INDEX2(k1,k2,m_NE1);                          const index_t e = INDEX2(k1,k2,m_NE1);
                         /* GENERATOR SNIP_PDEBC_SINGLE_0 TOP */  
9722                          ///////////////                          ///////////////
9723                          // process d //                          // process d //
9724                          ///////////////                          ///////////////
# Line 9479  void Brick::assemblePDEBoundarySingle(Pa Line 9755  void Brick::assemblePDEBoundarySingle(Pa
9755                                  const double tmp10_1 = tmp4_0*w2;                                  const double tmp10_1 = tmp4_0*w2;
9756                                  const double tmp11_1 = d_2*w3;                                  const double tmp11_1 = d_2*w3;
9757                                  const double tmp0_1 = tmp0_0*w0;                                  const double tmp0_1 = tmp0_0*w0;
                                 EM_S[INDEX2(6,4,8)]+=tmp0_1 + tmp1_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp2_1 + tmp3_1;  
                                 EM_S[INDEX2(4,0,8)]+=tmp4_1 + tmp5_1;  
                                 EM_S[INDEX2(2,0,8)]+=tmp6_1 + tmp7_1;  
                                 EM_S[INDEX2(4,4,8)]+=tmp10_1 + tmp8_1 + tmp9_1;  
                                 EM_S[INDEX2(2,2,8)]+=tmp10_1 + tmp11_1 + tmp12_1;  
9758                                  EM_S[INDEX2(0,0,8)]+=tmp13_1 + tmp14_1 + tmp15_1;                                  EM_S[INDEX2(0,0,8)]+=tmp13_1 + tmp14_1 + tmp15_1;
9759                                  EM_S[INDEX2(6,6,8)]+=tmp15_1 + tmp16_1 + tmp17_1;                                  EM_S[INDEX2(2,0,8)]+=tmp6_1 + tmp7_1;
9760                                  EM_S[INDEX2(0,4,8)]+=tmp4_1 + tmp5_1;                                  EM_S[INDEX2(4,0,8)]+=tmp4_1 + tmp5_1;
9761                                  EM_S[INDEX2(6,0,8)]+=tmp18_1;                                  EM_S[INDEX2(6,0,8)]+=tmp18_1;
                                 EM_S[INDEX2(4,2,8)]+=tmp18_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp0_1 + tmp1_1;  
9762                                  EM_S[INDEX2(0,2,8)]+=tmp6_1 + tmp7_1;                                  EM_S[INDEX2(0,2,8)]+=tmp6_1 + tmp7_1;
9763                                  EM_S[INDEX2(0,6,8)]+=tmp18_1;                                  EM_S[INDEX2(2,2,8)]+=tmp10_1 + tmp11_1 + tmp12_1;
9764                                    EM_S[INDEX2(4,2,8)]+=tmp18_1;
9765                                  EM_S[INDEX2(6,2,8)]+=tmp2_1 + tmp3_1;                                  EM_S[INDEX2(6,2,8)]+=tmp2_1 + tmp3_1;
9766                                    EM_S[INDEX2(0,4,8)]+=tmp4_1 + tmp5_1;
9767                                  EM_S[INDEX2(2,4,8)]+=tmp18_1;                                  EM_S[INDEX2(2,4,8)]+=tmp18_1;
9768                                    EM_S[INDEX2(4,4,8)]+=tmp10_1 + tmp8_1 + tmp9_1;
9769                                    EM_S[INDEX2(6,4,8)]+=tmp0_1 + tmp1_1;
9770                                    EM_S[INDEX2(0,6,8)]+=tmp18_1;
9771                                    EM_S[INDEX2(2,6,8)]+=tmp2_1 + tmp3_1;
9772                                    EM_S[INDEX2(4,6,8)]+=tmp0_1 + tmp1_1;
9773                                    EM_S[INDEX2(6,6,8)]+=tmp15_1 + tmp16_1 + tmp17_1;
9774                              } else { /* constant data */                              } else { /* constant data */
9775                                  const double tmp0_1 = d_p[0]*w5;                                  const double tmp0_1 = d_p[0]*w5;
9776                                  const double tmp2_1 = d_p[0]*w7;                                  const double tmp2_1 = d_p[0]*w7;
9777                                  const double tmp1_1 = d_p[0]*w6;                                  const double tmp1_1 = d_p[0]*w6;
                                 EM_S[INDEX2(6,4,8)]+=tmp0_1;  
                                 EM_S[INDEX2(2,6,8)]+=tmp0_1;  
                                 EM_S[INDEX2(4,0,8)]+=tmp0_1;  
                                 EM_S[INDEX2(2,0,8)]+=tmp0_1;  
                                 EM_S[INDEX2(4,4,8)]+=tmp1_1;  
                                 EM_S[INDEX2(2,2,8)]+=tmp1_1;  
9778                                  EM_S[INDEX2(0,0,8)]+=tmp1_1;                                  EM_S[INDEX2(0,0,8)]+=tmp1_1;
9779                                  EM_S[INDEX2(6,6,8)]+=tmp1_1;                                  EM_S[INDEX2(2,0,8)]+=tmp0_1;
9780                                  EM_S[INDEX2(0,4,8)]+=tmp0_1;                                  EM_S[INDEX2(4,0,8)]+=tmp0_1;
9781                                  EM_S[INDEX2(6,0,8)]+=tmp2_1;                                  EM_S[INDEX2(6,0,8)]+=tmp2_1;
                                 EM_S[INDEX2(4,2,8)]+=tmp2_1;  
                                 EM_S[INDEX2(4,6,8)]+=tmp0_1;  
9782                                  EM_S[INDEX2(0,2,8)]+=tmp0_1;                                  EM_S[INDEX2(0,2,8)]+=tmp0_1;
9783                                  EM_S[INDEX2(0,6,8)]+=tmp2_1;                                  EM_S[INDEX2(2,2,8)]+=tmp1_1;
9784                                    EM_S[INDEX2(4,2,8)]+=tmp2_1;
9785                                  EM_S[INDEX2(6,2,8)]+=tmp0_1;                                  EM_S[INDEX2(6,2,8)]+=tmp0_1;
9786                                    EM_S[INDEX2(0,4,8)]+=tmp0_1;
9787                                  EM_S[INDEX2(2,4,8)]+=tmp2_1;                                  EM_S[INDEX2(2,4,8)]+=tmp2_1;
9788                                    EM_S[INDEX2(4,4,8)]+=tmp1_1;
9789                                    EM_S[INDEX2(6,4,8)]+=tmp0_1;
9790                                    EM_S[INDEX2(0,6,8)]+=tmp2_1;
9791                                    EM_S[INDEX2(2,6,8)]+=tmp0_1;
9792                                    EM_S[INDEX2(4,6,8)]+=tmp0_1;
9793                                    EM_S[INDEX2(6,6,8)]+=tmp1_1;
9794                              }                              }
9795                          }                          }
9796                          ///////////////                          ///////////////
# Line 9551  void Brick::assemblePDEBoundarySingle(Pa Line 9827  void Brick::assemblePDEBoundarySingle(Pa
9827                                  EM_F[6]+=tmp0_1;                                  EM_F[6]+=tmp0_1;
9828                              }                              }
9829                          }                          }
                         /* GENERATOR SNIP_PDEBC_SINGLE_0 BOTTOM */  
9830                          const index_t firstNode=m_N0*m_N1*k2+m_N0*k1;                          const index_t firstNode=m_N0*m_N1*k2+m_N0*k1;
9831                          addToMatrixAndRHS(mat, rhs, EM_S, EM_F, add_EM_S,                          addToMatrixAndRHS(mat, rhs, EM_S, EM_F, add_EM_S,
9832                                  add_EM_F, firstNode);                                  add_EM_F, firstNode);
# Line 9562  void Brick::assemblePDEBoundarySingle(Pa Line 9837  void Brick::assemblePDEBoundarySingle(Pa
9837    
9838          if (m_faceOffset[1] > -1) {          if (m_faceOffset[1] > -1) {
9839              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring
9840  #pragma omp for nowait  #pragma omp for
9841                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {
9842                      for (index_t k1=0; k1<m_NE1; ++k1) {                      for (index_t k1=0; k1<m_NE1; ++k1) {
9843                          vector<double> EM_S(8*8, 0);                          vector<double> EM_S(8*8, 0);
9844                          vector<double> EM_F(8, 0);                          vector<double> EM_F(8, 0);
9845                          const index_t e = m_faceOffset[1]+INDEX2(k1,k2,m_NE1);                          const index_t e = m_faceOffset[1]+INDEX2(k1,k2,m_NE1);
                         /* GENERATOR SNIP_PDEBC_SINGLE_1 TOP */  
9846                          ///////////////                          ///////////////
9847                          // process d //                          // process d //
9848                          ///////////////                          ///////////////
# Line 9605  void Brick::assemblePDEBoundarySingle(Pa Line 9879  void Brick::assemblePDEBoundarySingle(Pa
9879                                  const double tmp8_1 = tmp4_0*w2;                                  const double tmp8_1 = tmp4_0*w2;
9880                                  const double tmp6_1 = d_2*w3;                                  const double tmp6_1 = d_2*w3;
9881                                  const double tmp0_1 = tmp0_0*w0;                                  const double tmp0_1 = tmp0_0*w0;
9882                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1;                                  EM_S[INDEX2(1,1,8)]+=tmp11_1 + tmp15_1 + tmp16_1;
9883                                  EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp3_1;                                  EM_S[INDEX2(3,1,8)]+=tmp2_1 + tmp3_1;
9884                                  EM_S[INDEX2(5,1,8)]+=tmp4_1 + tmp5_1;                                  EM_S[INDEX2(5,1,8)]+=tmp4_1 + tmp5_1;
9885                                  EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp1_1;                                  EM_S[INDEX2(7,1,8)]+=tmp14_1;
9886                                    EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp3_1;
9887                                  EM_S[INDEX2(3,3,8)]+=tmp6_1 + tmp7_1 + tmp8_1;                                  EM_S[INDEX2(3,3,8)]+=tmp6_1 + tmp7_1 + tmp8_1;
                                 EM_S[INDEX2(1,5,8)]+=tmp4_1 + tmp5_1;  
                                 EM_S[INDEX2(7,7,8)]+=tmp10_1 + tmp11_1 + tmp9_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp12_1 + tmp13_1;  
9888                                  EM_S[INDEX2(5,3,8)]+=tmp14_1;                                  EM_S[INDEX2(5,3,8)]+=tmp14_1;
9889                                  EM_S[INDEX2(1,1,8)]+=tmp11_1 + tmp15_1 + tmp16_1;                                  EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1;
9890                                  EM_S[INDEX2(7,1,8)]+=tmp14_1;                                  EM_S[INDEX2(1,5,8)]+=tmp4_1 + tmp5_1;
9891                                    EM_S[INDEX2(3,5,8)]+=tmp14_1;
9892                                  EM_S[INDEX2(5,5,8)]+=tmp17_1 + tmp18_1 + tmp8_1;                                  EM_S[INDEX2(5,5,8)]+=tmp17_1 + tmp18_1 + tmp8_1;
9893                                  EM_S[INDEX2(7,5,8)]+=tmp12_1 + tmp13_1;                                  EM_S[INDEX2(7,5,8)]+=tmp12_1 + tmp13_1;
                                 EM_S[INDEX2(3,5,8)]+=tmp14_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp2_1 + tmp3_1;  
9894                                  EM_S[INDEX2(1,7,8)]+=tmp14_1;                                  EM_S[INDEX2(1,7,8)]+=tmp14_1;
9895                                    EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp1_1;
9896                                    EM_S[INDEX2(5,7,8)]+=tmp12_1 + tmp13_1;
9897                                    EM_S[INDEX2(7,7,8)]+=tmp10_1 + tmp11_1 + tmp9_1;
9898                              } else { /* constant data */                              } else { /* constant data */
9899                                  const double tmp0_1 = d_p[0]*w5;                                  const double tmp0_1 = d_p[0]*w5;
9900                                  const double tmp2_1 = d_p[0]*w7;                                  const double tmp2_1 = d_p[0]*w7;
9901                                  const double tmp1_1 = d_p[0]*w6;                                  const double tmp1_1 = d_p[0]*w6;
9902                                  EM_S[INDEX2(7,3,8)]+=tmp0_1;                                  EM_S[INDEX2(1,1,8)]+=tmp1_1;
9903                                  EM_S[INDEX2(1,3,8)]+=tmp0_1;                                  EM_S[INDEX2(3,1,8)]+=tmp0_1;
9904                                  EM_S[INDEX2(5,1,8)]+=tmp0_1;                                  EM_S[INDEX2(5,1,8)]+=tmp0_1;
9905                                  EM_S[INDEX2(3,7,8)]+=tmp0_1;                                  EM_S[INDEX2(7,1,8)]+=tmp2_1;
9906                                    EM_S[INDEX2(1,3,8)]+=tmp0_1;
9907                                  EM_S[INDEX2(3,3,8)]+=tmp1_1;                                  EM_S[INDEX2(3,3,8)]+=tmp1_1;
                                 EM_S[INDEX2(1,5,8)]+=tmp0_1;  
                                 EM_S[INDEX2(7,7,8)]+=tmp1_1;  
                                 EM_S[INDEX2(5,7,8)]+=tmp0_1;  
9908                                  EM_S[INDEX2(5,3,8)]+=tmp2_1;                                  EM_S[INDEX2(5,3,8)]+=tmp2_1;
9909                                  EM_S[INDEX2(1,1,8)]+=tmp1_1;                                  EM_S[INDEX2(7,3,8)]+=tmp0_1;
9910                                  EM_S[INDEX2(7,1,8)]+=tmp2_1;                                  EM_S[INDEX2(1,5,8)]+=tmp0_1;
9911                                    EM_S[INDEX2(3,5,8)]+=tmp2_1;
9912                                  EM_S[INDEX2(5,5,8)]+=tmp1_1;                                  EM_S[INDEX2(5,5,8)]+=tmp1_1;
9913                                  EM_S[INDEX2(7,5,8)]+=tmp0_1;                                  EM_S[INDEX2(7,5,8)]+=tmp0_1;
                                 EM_S[INDEX2(3,5,8)]+=tmp2_1;  
                                 EM_S[INDEX2(3,1,8)]+=tmp0_1;  
9914                                  EM_S[INDEX2(1,7,8)]+=tmp2_1;                                  EM_S[INDEX2(1,7,8)]+=tmp2_1;
9915                                    EM_S[INDEX2(3,7,8)]+=tmp0_1;
9916                                    EM_S[INDEX2(5,7,8)]+=tmp0_1;
9917                                    EM_S[INDEX2(7,7,8)]+=tmp1_1;
9918                              }                              }
9919                          }                          }
9920                          ///////////////                          ///////////////
# Line 9677  void Brick::assemblePDEBoundarySingle(Pa Line 9951  void Brick::assemblePDEBoundarySingle(Pa
9951                                  EM_F[7]+=tmp0_1;                                  EM_F[7]+=tmp0_1;
9952                              }                              }
9953                          }                          }
                         /* GENERATOR SNIP_PDEBC_SINGLE_1 BOTTOM */  
9954                          const index_t firstNode=m_N0*m_N1*k2+m_N0*(k1+1)-2;                          const index_t firstNode=m_N0*m_N1*k2+m_N0*(k1+1)-2;
9955                          addToMatrixAndRHS(mat, rhs, EM_S, EM_F, add_EM_S,                          addToMatrixAndRHS(mat, rhs, EM_S, EM_F, add_EM_S,
9956                                  add_EM_F, firstNode);                                  add_EM_F, firstNode);
# Line 9688  void Brick::assemblePDEBoundarySingle(Pa Line 9961  void Brick::assemblePDEBoundarySingle(Pa
9961    
9962          if (m_faceOffset[2] > -1) {          if (m_faceOffset[2] > -1) {
9963              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring
9964  #pragma omp for nowait  #pragma omp for
9965                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {
9966                      for (index_t k0=0; k0<m_NE0; ++k0) {                      for (index_t k0=0; k0<m_NE0; ++k0) {
9967                          vector<double> EM_S(8*8, 0);                          vector<double> EM_S(8*8, 0);
9968                          vector<double> EM_F(8, 0);                          vector<double> EM_F(8, 0);
9969                          const index_t e = m_faceOffset[2]+INDEX2(k0,k2,m_NE0);                          const index_t e = m_faceOffset[2]+INDEX2(k0,k2,m_NE0);
                         /* GENERATOR SNIP_PDEBC_SINGLE_2 TOP */  
9970                          ///////////////                          ///////////////
9971                          // process d //                          // process d //
9972                          ///////////////                          ///////////////
# Line 9731  void Brick::assemblePDEBoundarySingle(Pa Line 10003  void Brick::assemblePDEBoundarySingle(Pa
10003                                  const double tmp6_1 = d_2*w16;                                  const double tmp6_1 = d_2*w16;
10004                                  const double tmp9_1 = tmp5_0*w14;                                  const double tmp9_1 = tmp5_0*w14;
10005                                  const double tmp4_1 = tmp3_0*w13;                                  const double tmp4_1 = tmp3_0*w13;
                                 EM_S[INDEX2(5,4,8)]+=tmp0_1 + tmp1_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp2_1 + tmp3_1;  
                                 EM_S[INDEX2(4,0,8)]+=tmp4_1 + tmp5_1;  
                                 EM_S[INDEX2(4,4,8)]+=tmp6_1 + tmp7_1 + tmp8_1;  
                                 EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp9_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp10_1 + tmp11_1 + tmp7_1;  
10006                                  EM_S[INDEX2(0,0,8)]+=tmp12_1 + tmp13_1 + tmp14_1;                                  EM_S[INDEX2(0,0,8)]+=tmp12_1 + tmp13_1 + tmp14_1;
10007                                    EM_S[INDEX2(1,0,8)]+=tmp17_1 + tmp18_1;
10008                                    EM_S[INDEX2(4,0,8)]+=tmp4_1 + tmp5_1;
10009                                  EM_S[INDEX2(5,0,8)]+=tmp9_1;                                  EM_S[INDEX2(5,0,8)]+=tmp9_1;
10010                                  EM_S[INDEX2(4,5,8)]+=tmp0_1 + tmp1_1;                                  EM_S[INDEX2(0,1,8)]+=tmp17_1 + tmp18_1;
10011                                    EM_S[INDEX2(1,1,8)]+=tmp10_1 + tmp11_1 + tmp7_1;
10012                                    EM_S[INDEX2(4,1,8)]+=tmp9_1;
10013                                    EM_S[INDEX2(5,1,8)]+=tmp2_1 + tmp3_1;
10014                                  EM_S[INDEX2(0,4,8)]+=tmp4_1 + tmp5_1;                                  EM_S[INDEX2(0,4,8)]+=tmp4_1 + tmp5_1;
                                 EM_S[INDEX2(5,5,8)]+=tmp13_1 + tmp15_1 + tmp16_1;  
10015                                  EM_S[INDEX2(1,4,8)]+=tmp9_1;                                  EM_S[INDEX2(1,4,8)]+=tmp9_1;
10016                                  EM_S[INDEX2(1,0,8)]+=tmp17_1 + tmp18_1;                                  EM_S[INDEX2(4,4,8)]+=tmp6_1 + tmp7_1 + tmp8_1;
10017                                  EM_S[INDEX2(0,1,8)]+=tmp17_1 + tmp18_1;                                  EM_S[INDEX2(5,4,8)]+=tmp0_1 + tmp1_1;
10018                                  EM_S[INDEX2(0,5,8)]+=tmp9_1;                                  EM_S[INDEX2(0,5,8)]+=tmp9_1;
10019                                    EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1;
10020                                    EM_S[INDEX2(4,5,8)]+=tmp0_1 + tmp1_1;
10021                                    EM_S[INDEX2(5,5,8)]+=tmp13_1 + tmp15_1 + tmp16_1;
10022                              } else { /* constant data */                              } else { /* constant data */
10023                                  const double tmp0_1 = d_p[0]*w17;                                  const double tmp0_1 = d_p[0]*w17;
10024                                  const double tmp2_1 = d_p[0]*w19;                                  const double tmp2_1 = d_p[0]*w19;
10025                                  const double tmp1_1 = d_p[0]*w18;                                  const double tmp1_1 = d_p[0]*w18;
                                 EM_S[INDEX2(5,4,8)]+=tmp0_1;  
                                 EM_S[INDEX2(5,1,8)]+=tmp0_1;  
                                 EM_S[INDEX2(4,0,8)]+=tmp0_1;  
                                 EM_S[INDEX2(4,4,8)]+=tmp1_1;  
                                 EM_S[INDEX2(1,5,8)]+=tmp0_1;  
                                 EM_S[INDEX2(4,1,8)]+=tmp2_1;  
                                 EM_S[INDEX2(1,1,8)]+=tmp1_1;  
10026                                  EM_S[INDEX2(0,0,8)]+=tmp1_1;                                  EM_S[INDEX2(0,0,8)]+=tmp1_1;
10027                                    EM_S[INDEX2(1,0,8)]+=tmp0_1;
10028                                    EM_S[INDEX2(4,0,8)]+=tmp0_1;
10029                                  EM_S[INDEX2(5,0,8)]+=tmp2_1;                                  EM_S[INDEX2(5,0,8)]+=tmp2_1;
10030                                  EM_S[INDEX2(4,5,8)]+=tmp0_1;                                  EM_S[INDEX2(0,1,8)]+=tmp0_1;
10031                                    EM_S[INDEX2(1,1,8)]+=tmp1_1;
10032                                    EM_S[INDEX2(4,1,8)]+=tmp2_1;
10033                                    EM_S[INDEX2(5,1,8)]+=tmp0_1;
10034                                  EM_S[INDEX2(0,4,8)]+=tmp0_1;                                  EM_S[INDEX2(0,4,8)]+=tmp0_1;
                                 EM_S[INDEX2(5,5,8)]+=tmp1_1;  
10035                                  EM_S[INDEX2(1,4,8)]+=tmp2_1;                                  EM_S[INDEX2(1,4,8)]+=tmp2_1;
10036                                  EM_S[INDEX2(1,0,8)]+=tmp0_1;                                  EM_S[INDEX2(4,4,8)]+=tmp1_1;
10037                                  EM_S[INDEX2(0,1,8)]+=tmp0_1;                                  EM_S[INDEX2(5,4,8)]+=tmp0_1;
10038                                  EM_S[INDEX2(0,5,8)]+=tmp2_1;                                  EM_S[INDEX2(0,5,8)]+=tmp2_1;
10039                                    EM_S[INDEX2(1,5,8)]+=tmp0_1;
10040                                    EM_S[INDEX2(4,5,8)]+=tmp0_1;
10041                                    EM_S[INDEX2(5,5,8)]+=tmp1_1;
10042                              }                              }
10043                          }                          }
10044                          ///////////////                          ///////////////
# Line 9803  void Brick::assemblePDEBoundarySingle(Pa Line 10075  void Brick::assemblePDEBoundarySingle(Pa
10075                                  EM_F[5]+=tmp0_1;                                  EM_F[5]+=tmp0_1;
10076                              }                              }
10077                          }                          }
                         /* GENERATOR SNIP_PDEBC_SINGLE_2 BOTTOM */  
10078                          const index_t firstNode=m_N0*m_N1*k2+k0;                          const index_t firstNode=m_N0*m_N1*k2+k0;
10079                          addToMatrixAndRHS(mat, rhs, EM_S, EM_F, add_EM_S,                          addToMatrixAndRHS(mat, rhs, EM_S, EM_F, add_EM_S,
10080                                  add_EM_F, firstNode);                                  add_EM_F, firstNode);
# Line 9814  void Brick::assemblePDEBoundarySingle(Pa Line 10085  void Brick::assemblePDEBoundarySingle(Pa
10085    
10086          if (m_faceOffset[3] > -1) {          if (m_faceOffset[3] > -1) {
10087              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring              for (index_t k2_0=0; k2_0<2; k2_0++) { // colouring
10088  #pragma omp for nowait  #pragma omp for
10089                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {                  for (index_t k2=k2_0; k2<m_NE2; k2+=2) {
10090                      for (index_t k0=0; k0<m_NE0; ++k0) {                      for (index_t k0=0; k0<m_NE0; ++k0) {
10091                          vector<double> EM_S(8*8, 0);           &nbs