/[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

revision 4370 by caltinay, Fri Apr 19 06:15:24 2013 UTC revision 4482 by caltinay, Tue Jun 25 05:20:01 2013 UTC
# Line 17  Line 17 
17  #include <paso/SystemMatrix.h>  #include <paso/SystemMatrix.h>
18  #include <esysUtils/esysFileWriter.h>  #include <esysUtils/esysFileWriter.h>
19    
20    #include <boost/scoped_array.hpp>
21    
22  #ifdef USE_NETCDF  #ifdef USE_NETCDF
23  #include <netcdfcpp.h>  #include <netcdfcpp.h>
24  #endif  #endif
# Line 294  void Brick::readNcGrid(escript::Data& ou Line 296  void Brick::readNcGrid(escript::Data& ou
296          throw RipleyException("readNcGrid(): only scalar data supported");          throw RipleyException("readNcGrid(): only scalar data supported");
297    
298      const int dims = var->num_dims();      const int dims = var->num_dims();
299      const long *edges = var->edges();      boost::scoped_array<long> edges(var->edges());
300    
301      // is this a slice of the data object (dims!=3)?      // is this a slice of the data object (dims!=3)?
302      // note the expected ordering of edges (as in numpy: z,y,x)      // note the expected ordering of edges (as in numpy: z,y,x)
# Line 534  void Brick::writeBinaryGridImpl(const es Line 536  void Brick::writeBinaryGridImpl(const es
536      escript::Data* _in = const_cast<escript::Data*>(&in);      escript::Data* _in = const_cast<escript::Data*>(&in);
537    
538      // from here on we know that each sample consists of one value      // from here on we know that each sample consists of one value
539      FileWriter* fw = new FileWriter();      FileWriter fw;
540      fw->openFile(filename, fileSize);      fw.openFile(filename, fileSize);
541      MPIBarrier();      MPIBarrier();
542    
543      for (index_t z=0; z<myN2; z++) {      for (index_t z=0; z<myN2; z++) {
# Line 554  void Brick::writeBinaryGridImpl(const es Line 556  void Brick::writeBinaryGridImpl(const es
556                      oss.write(byte_swap32(value), sizeof(fvalue));                      oss.write(byte_swap32(value), sizeof(fvalue));
557                  }                  }
558              }              }
559              fw->writeAt(oss, fileofs);              fw.writeAt(oss, fileofs);
560          }          }
561      }      }
562      fw->close();      fw.close();
563  }  }
564    
565  void Brick::dump(const string& fileName) const  void Brick::dump(const string& fileName) const
# Line 1095  void Brick::assembleCoordinates(escript: Line 1097  void Brick::assembleCoordinates(escript:
1097  void Brick::assembleGradient(escript::Data& out, escript::Data& in) const  void Brick::assembleGradient(escript::Data& out, escript::Data& in) const
1098  {  {
1099      const dim_t numComp = in.getDataPointSize();      const dim_t numComp = in.getDataPointSize();
     const double h0 = m_dx[0];  
     const double h1 = m_dx[1];  
     const double h2 = m_dx[2];  
1100      const double C0 = .044658198738520451079;      const double C0 = .044658198738520451079;
1101      const double C1 = .16666666666666666667;      const double C1 = .16666666666666666667;
1102      const double C2 = .21132486540518711775;      const double C2 = .21132486540518711775;
# Line 1132  void Brick::assembleGradient(escript::Da Line 1131  void Brick::assembleGradient(escript::Da
1131                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1132                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE[0],m_NE[1]));                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE[0],m_NE[1]));
1133                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1134                              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;                              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) / m_dx[0];
1135                              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;                              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) / m_dx[0];
1136                              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;                              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) / m_dx[0];
1137                              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;                              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) / m_dx[0];
1138                              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;                              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) / m_dx[1];
1139                              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;                              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) / m_dx[1];
1140                              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;                              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) / m_dx[1];
1141                              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;                              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) / m_dx[1];
1142                              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;                              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) / m_dx[2];
1143                              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;                              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) / m_dx[2];
1144                              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 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) / m_dx[2];
1145                              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 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) / m_dx[2];
1146                              o[INDEX3(i,0,0,numComp,3)] = V0;                              o[INDEX3(i,0,0,numComp,3)] = V0;
1147                              o[INDEX3(i,1,0,numComp,3)] = V4;                              o[INDEX3(i,1,0,numComp,3)] = V4;
1148                              o[INDEX3(i,2,0,numComp,3)] = V8;                              o[INDEX3(i,2,0,numComp,3)] = V8;
# Line 1199  void Brick::assembleGradient(escript::Da Line 1198  void Brick::assembleGradient(escript::Da
1198                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1199                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE[0],m_NE[1]));                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE[0],m_NE[1]));
1200                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1201                              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 / m_dx[0];
1202                              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;                              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 / m_dx[1];
1203                              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;                              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 / m_dx[2];
1204                          } // end of component loop i                          } // end of component loop i
1205                      } // end of k0 loop                      } // end of k0 loop
1206                  } // end of k1 loop                  } // end of k1 loop
# Line 1233  void Brick::assembleGradient(escript::Da Line 1232  void Brick::assembleGradient(escript::Da
1232                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1233                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE[1]));                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE[1]));
1234                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1235                              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) / m_dx[1];
1236                              const double V1=((f_010[i]-f_000[i])*C2 + (f_011[i]-f_001[i])*C6) / h1;                              const double V1=((f_010[i]-f_000[i])*C2 + (f_011[i]-f_001[i])*C6) / m_dx[1];
1237                              const double V2=((f_001[i]-f_000[i])*C6 + (f_010[i]-f_011[i])*C2) / h2;                              const double V2=((f_001[i]-f_000[i])*C6 + (f_010[i]-f_011[i])*C2) / m_dx[2];
1238                              const double V3=((f_001[i]-f_000[i])*C2 + (f_011[i]-f_010[i])*C6) / h2;                              const double V3=((f_001[i]-f_000[i])*C2 + (f_011[i]-f_010[i])*C6) / m_dx[2];
1239                              o[INDEX3(i,0,0,numComp,3)] = ((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;                              o[INDEX3(i,0,0,numComp,3)] = ((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) / m_dx[0];
1240                              o[INDEX3(i,1,0,numComp,3)] = V0;                              o[INDEX3(i,1,0,numComp,3)] = V0;
1241                              o[INDEX3(i,2,0,numComp,3)] = V2;                              o[INDEX3(i,2,0,numComp,3)] = V2;
1242                              o[INDEX3(i,0,1,numComp,3)] = ((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;                              o[INDEX3(i,0,1,numComp,3)] = ((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) / m_dx[0];
1243                              o[INDEX3(i,1,1,numComp,3)] = V0;                              o[INDEX3(i,1,1,numComp,3)] = V0;
1244                              o[INDEX3(i,2,1,numComp,3)] = V3;                              o[INDEX3(i,2,1,numComp,3)] = V3;
1245                              o[INDEX3(i,0,2,numComp,3)] = ((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;                              o[INDEX3(i,0,2,numComp,3)] = ((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) / m_dx[0];
1246                              o[INDEX3(i,1,2,numComp,3)] = V1;                              o[INDEX3(i,1,2,numComp,3)] = V1;
1247                              o[INDEX3(i,2,2,numComp,3)] = V2;                              o[INDEX3(i,2,2,numComp,3)] = V2;
1248                              o[INDEX3(i,0,3,numComp,3)] = ((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;                              o[INDEX3(i,0,3,numComp,3)] = ((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) / m_dx[0];
1249                              o[INDEX3(i,1,3,numComp,3)] = V1;                              o[INDEX3(i,1,3,numComp,3)] = V1;
1250                              o[INDEX3(i,2,3,numComp,3)] = V3;                              o[INDEX3(i,2,3,numComp,3)] = V3;
1251                          } // end of component loop i                          } // end of component loop i
# Line 1267  void Brick::assembleGradient(escript::Da Line 1266  void Brick::assembleGradient(escript::Da
1266                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_NN[0]-1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_NN[0]-1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1267                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE[1]));                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE[1]));
1268                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1269                              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) / m_dx[1];
1270                              const double V1=((f_110[i]-f_100[i])*C2 + (f_111[i]-f_101[i])*C6) / h1;                              const double V1=((f_110[i]-f_100[i])*C2 + (f_111[i]-f_101[i])*C6) / m_dx[1];
1271                              const double V2=((f_101[i]-f_100[i])*C6 + (f_111[i]-f_110[i])*C2) / h2;                              const double V2=((f_101[i]-f_100[i])*C6 + (f_111[i]-f_110[i])*C2) / m_dx[2];
1272                              const double V3=((f_101[i]-f_100[i])*C2 + (f_111[i]-f_110[i])*C6) / h2;                              const double V3=((f_101[i]-f_100[i])*C2 + (f_111[i]-f_110[i])*C6) / m_dx[2];
1273                              o[INDEX3(i,0,0,numComp,3)] = ((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;                              o[INDEX3(i,0,0,numComp,3)] = ((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) / m_dx[0];
1274                              o[INDEX3(i,1,0,numComp,3)] = V0;                              o[INDEX3(i,1,0,numComp,3)] = V0;
1275                              o[INDEX3(i,2,0,numComp,3)] = V2;                              o[INDEX3(i,2,0,numComp,3)] = V2;
1276                              o[INDEX3(i,0,1,numComp,3)] = ((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;                              o[INDEX3(i,0,1,numComp,3)] = ((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) / m_dx[0];
1277                              o[INDEX3(i,1,1,numComp,3)] = V0;                              o[INDEX3(i,1,1,numComp,3)] = V0;
1278                              o[INDEX3(i,2,1,numComp,3)] = V3;                              o[INDEX3(i,2,1,numComp,3)] = V3;
1279                              o[INDEX3(i,0,2,numComp,3)] = ((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;                              o[INDEX3(i,0,2,numComp,3)] = ((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) / m_dx[0];
1280                              o[INDEX3(i,1,2,numComp,3)] = V1;                              o[INDEX3(i,1,2,numComp,3)] = V1;
1281                              o[INDEX3(i,2,2,numComp,3)] = V2;                              o[INDEX3(i,2,2,numComp,3)] = V2;
1282                              o[INDEX3(i,0,3,numComp,3)] = ((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;                              o[INDEX3(i,0,3,numComp,3)] = ((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) / m_dx[0];
1283                              o[INDEX3(i,1,3,numComp,3)] = V1;                              o[INDEX3(i,1,3,numComp,3)] = V1;
1284                              o[INDEX3(i,2,3,numComp,3)] = V3;                              o[INDEX3(i,2,3,numComp,3)] = V3;
1285                          } // end of component loop i                          } // end of component loop i
# Line 1301  void Brick::assembleGradient(escript::Da Line 1300  void Brick::assembleGradient(escript::Da
1300                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1301                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE[0]));
1302                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1303                              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) / m_dx[0];
1304                              const double V1=((f_001[i]-f_000[i])*C6 + (f_101[i]-f_100[i])*C2) / h2;                              const double V1=((f_001[i]-f_000[i])*C6 + (f_101[i]-f_100[i])*C2) / m_dx[2];
1305                              const double V2=((f_001[i]-f_000[i])*C2 + (f_101[i]-f_100[i])*C6) / h2;                              const double V2=((f_001[i]-f_000[i])*C2 + (f_101[i]-f_100[i])*C6) / m_dx[2];
1306                              o[INDEX3(i,0,0,numComp,3)] = V0;                              o[INDEX3(i,0,0,numComp,3)] = V0;
1307                              o[INDEX3(i,1,0,numComp,3)] = ((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;                              o[INDEX3(i,1,0,numComp,3)] = ((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) / m_dx[1];
1308                              o[INDEX3(i,2,0,numComp,3)] = V1;                              o[INDEX3(i,2,0,numComp,3)] = V1;
1309                              o[INDEX3(i,0,1,numComp,3)] = V0;                              o[INDEX3(i,0,1,numComp,3)] = V0;
1310                              o[INDEX3(i,1,1,numComp,3)] = ((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;                              o[INDEX3(i,1,1,numComp,3)] = ((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) / m_dx[1];
1311                              o[INDEX3(i,2,1,numComp,3)] = V2;                              o[INDEX3(i,2,1,numComp,3)] = V2;
1312                              o[INDEX3(i,0,2,numComp,3)] = V0;                              o[INDEX3(i,0,2,numComp,3)] = V0;
1313                              o[INDEX3(i,1,2,numComp,3)] = ((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;                              o[INDEX3(i,1,2,numComp,3)] = ((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) / m_dx[1];
1314                              o[INDEX3(i,2,2,numComp,3)] = V1;                              o[INDEX3(i,2,2,numComp,3)] = V1;
1315                              o[INDEX3(i,0,3,numComp,3)] = V0;                              o[INDEX3(i,0,3,numComp,3)] = V0;
1316                              o[INDEX3(i,1,3,numComp,3)] = ((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;                              o[INDEX3(i,1,3,numComp,3)] = ((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) / m_dx[1];
1317                              o[INDEX3(i,2,3,numComp,3)] = V2;                              o[INDEX3(i,2,3,numComp,3)] = V2;
1318                          } // end of component loop i                          } // end of component loop i
1319                      } // end of k0 loop                      } // end of k0 loop
# Line 1334  void Brick::assembleGradient(escript::Da Line 1333  void Brick::assembleGradient(escript::Da
1333                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_NN[1]-1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_NN[1]-1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1334                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE[0]));
1335                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1336                              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) / m_dx[0];
1337                              const double V1=((f_110[i]-f_010[i])*C2 + (f_111[i]-f_011[i])*C6) / h0;                              const double V1=((f_110[i]-f_010[i])*C2 + (f_111[i]-f_011[i])*C6) / m_dx[0];
1338                              const double V2=((f_011[i]-f_010[i])*C6 + (f_111[i]-f_110[i])*C2) / h2;                              const double V2=((f_011[i]-f_010[i])*C6 + (f_111[i]-f_110[i])*C2) / m_dx[2];
1339                              const double V3=((f_011[i]-f_010[i])*C2 + (f_111[i]-f_110[i])*C6) / h2;                              const double V3=((f_011[i]-f_010[i])*C2 + (f_111[i]-f_110[i])*C6) / m_dx[2];
1340                              o[INDEX3(i,0,0,numComp,3)] = V0;                              o[INDEX3(i,0,0,numComp,3)] = V0;
1341                              o[INDEX3(i,1,0,numComp,3)] = ((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;                              o[INDEX3(i,1,0,numComp,3)] = ((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) / m_dx[1];
1342                              o[INDEX3(i,2,0,numComp,3)] = V2;                              o[INDEX3(i,2,0,numComp,3)] = V2;
1343                              o[INDEX3(i,0,1,numComp,3)] = V0;                              o[INDEX3(i,0,1,numComp,3)] = V0;
1344                              o[INDEX3(i,1,1,numComp,3)] = ((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;                              o[INDEX3(i,1,1,numComp,3)] = ((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) / m_dx[1];
1345                              o[INDEX3(i,2,1,numComp,3)] = V3;                              o[INDEX3(i,2,1,numComp,3)] = V3;
1346                              o[INDEX3(i,0,2,numComp,3)] = V1;                              o[INDEX3(i,0,2,numComp,3)] = V1;
1347                              o[INDEX3(i,1,2,numComp,3)] = ((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;                              o[INDEX3(i,1,2,numComp,3)] = ((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) / m_dx[1];
1348                              o[INDEX3(i,2,2,numComp,3)] = V2;                              o[INDEX3(i,2,2,numComp,3)] = V2;
1349                              o[INDEX3(i,0,3,numComp,3)] = V1;                              o[INDEX3(i,0,3,numComp,3)] = V1;
1350                              o[INDEX3(i,1,3,numComp,3)] = ((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;                              o[INDEX3(i,1,3,numComp,3)] = ((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) / m_dx[1];
1351                              o[INDEX3(i,2,3,numComp,3)] = V3;                              o[INDEX3(i,2,3,numComp,3)] = V3;
1352                          } // end of component loop i                          } // end of component loop i
1353                      } // end of k0 loop                      } // end of k0 loop
# Line 1368  void Brick::assembleGradient(escript::Da Line 1367  void Brick::assembleGradient(escript::Da
1367                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1368                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE[0]));
1369                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1370                              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) / m_dx[0];
1371                              const double V1=((f_100[i]-f_000[i])*C2 + (f_110[i]-f_010[i])*C6) / h0;                              const double V1=((f_100[i]-f_000[i])*C2 + (f_110[i]-f_010[i])*C6) / m_dx[0];
1372                              const double V2=((f_010[i]-f_000[i])*C6 + (f_110[i]-f_100[i])*C2) / h1;                              const double V2=((f_010[i]-f_000[i])*C6 + (f_110[i]-f_100[i])*C2) / m_dx[1];
1373                              const double V3=((f_010[i]-f_000[i])*C2 + (f_110[i]-f_100[i])*C6) / h1;                              const double V3=((f_010[i]-f_000[i])*C2 + (f_110[i]-f_100[i])*C6) / m_dx[1];
1374                              o[INDEX3(i,0,0,numComp,3)] = V0;                              o[INDEX3(i,0,0,numComp,3)] = V0;
1375                              o[INDEX3(i,1,0,numComp,3)] = V2;                              o[INDEX3(i,1,0,numComp,3)] = V2;
1376                              o[INDEX3(i,2,0,numComp,3)] = ((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;                              o[INDEX3(i,2,0,numComp,3)] = ((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) / m_dx[2];
1377                              o[INDEX3(i,0,1,numComp,3)] = V0;                              o[INDEX3(i,0,1,numComp,3)] = V0;
1378                              o[INDEX3(i,1,1,numComp,3)] = V3;                              o[INDEX3(i,1,1,numComp,3)] = V3;
1379                              o[INDEX3(i,2,1,numComp,3)] = ((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;                              o[INDEX3(i,2,1,numComp,3)] = ((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) / m_dx[2];
1380                              o[INDEX3(i,0,2,numComp,3)] = V1;                              o[INDEX3(i,0,2,numComp,3)] = V1;
1381                              o[INDEX3(i,1,2,numComp,3)] = V2;                              o[INDEX3(i,1,2,numComp,3)] = V2;
1382                              o[INDEX3(i,2,2,numComp,3)] = ((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;                              o[INDEX3(i,2,2,numComp,3)] = ((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) / m_dx[2];
1383                              o[INDEX3(i,0,3,numComp,3)] = V1;                              o[INDEX3(i,0,3,numComp,3)] = V1;
1384                              o[INDEX3(i,1,3,numComp,3)] = V3;                              o[INDEX3(i,1,3,numComp,3)] = V3;
1385                              o[INDEX3(i,2,3,numComp,3)] = ((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;                              o[INDEX3(i,2,3,numComp,3)] = ((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) / m_dx[2];
1386                          } // end of component loop i                          } // end of component loop i
1387                      } // end of k0 loop                      } // end of k0 loop
1388                  } // end of k1 loop                  } // end of k1 loop
# Line 1402  void Brick::assembleGradient(escript::Da Line 1401  void Brick::assembleGradient(escript::Da
1401                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_NN[2]-1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_NN[2]-1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1402                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE[0]));
1403                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1404                              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) / m_dx[0];
1405                              const double V1=((f_101[i]-f_001[i])*C2 + (f_111[i]-f_011[i])*C6) / h0;                              const double V1=((f_101[i]-f_001[i])*C2 + (f_111[i]-f_011[i])*C6) / m_dx[0];
1406                              const double V2=((f_011[i]-f_001[i])*C6 + (f_111[i]-f_101[i])*C2) / h1;                              const double V2=((f_011[i]-f_001[i])*C6 + (f_111[i]-f_101[i])*C2) / m_dx[1];
1407                              const double V3=((f_011[i]-f_001[i])*C2 + (f_111[i]-f_101[i])*C6) / h1;                              const double V3=((f_011[i]-f_001[i])*C2 + (f_111[i]-f_101[i])*C6) / m_dx[1];
1408                              o[INDEX3(i,0,0,numComp,3)] = V0;                              o[INDEX3(i,0,0,numComp,3)] = V0;
1409                              o[INDEX3(i,1,0,numComp,3)] = V2;                              o[INDEX3(i,1,0,numComp,3)] = V2;
1410                              o[INDEX3(i,2,0,numComp,3)] = ((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;                              o[INDEX3(i,2,0,numComp,3)] = ((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) / m_dx[2];
1411                              o[INDEX3(i,0,1,numComp,3)] = V0;                              o[INDEX3(i,0,1,numComp,3)] = V0;
1412                              o[INDEX3(i,1,1,numComp,3)] = V3;                              o[INDEX3(i,1,1,numComp,3)] = V3;
1413                              o[INDEX3(i,2,1,numComp,3)] = ((f_011[i]-f_010[i])*C0 + (f_101[i]-f_100[i])*C5 + (f_001[i]+f_111[i]-f_000[i]-f_110[i])*C1) / h2;                              o[INDEX3(i,2,1,numComp,3)] = ((f_011[i]-f_010[i])*C0 + (f_101[i]-f_100[i])*C5 + (f_001[i]+f_111[i]-f_000[i]-f_110[i])*C1) / m_dx[2];
1414                              o[INDEX3(i,0,2,numComp,3)] = V1;                              o[INDEX3(i,0,2,numComp,3)] = V1;
1415                              o[INDEX3(i,1,2,numComp,3)] = V2;                              o[INDEX3(i,1,2,numComp,3)] = V2;
1416                              o[INDEX3(i,2,2,numComp,3)] = ((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;                              o[INDEX3(i,2,2,numComp,3)] = ((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) / m_dx[2];
1417                              o[INDEX3(i,0,3,numComp,3)] = V1;                              o[INDEX3(i,0,3,numComp,3)] = V1;
1418                              o[INDEX3(i,1,3,numComp,3)] = V3;                              o[INDEX3(i,1,3,numComp,3)] = V3;
1419                              o[INDEX3(i,2,3,numComp,3)] = ((f_001[i]-f_000[i])*C0 + (f_111[i]-f_110[i])*C5 + (f_011[i]+f_101[i]-f_010[i]-f_100[i])*C1) / h2;                              o[INDEX3(i,2,3,numComp,3)] = ((f_001[i]-f_000[i])*C0 + (f_111[i]-f_110[i])*C5 + (f_011[i]+f_101[i]-f_010[i]-f_100[i])*C1) / m_dx[2];
1420                          } // end of component loop i                          } // end of component loop i
1421                      } // end of k0 loop                      } // end of k0 loop
1422                  } // end of k1 loop                  } // end of k1 loop
# Line 1449  void Brick::assembleGradient(escript::Da Line 1448  void Brick::assembleGradient(escript::Da
1448                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1449                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE[1]));                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE[1]));
1450                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1451                              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 / m_dx[0];
1452                              o[INDEX3(i,1,0,numComp,3)] = (f_010[i]+f_011[i]-f_000[i]-f_001[i])*C4 / h1;                              o[INDEX3(i,1,0,numComp,3)] = (f_010[i]+f_011[i]-f_000[i]-f_001[i])*C4 / m_dx[1];
1453                              o[INDEX3(i,2,0,numComp,3)] = (f_001[i]+f_011[i]-f_000[i]-f_010[i])*C4 / h2;                              o[INDEX3(i,2,0,numComp,3)] = (f_001[i]+f_011[i]-f_000[i]-f_010[i])*C4 / m_dx[2];
1454                          } // end of component loop i                          } // end of component loop i
1455                      } // end of k1 loop                      } // end of k1 loop
1456                  } // end of k2 loop                  } // end of k2 loop
# Line 1470  void Brick::assembleGradient(escript::Da Line 1469  void Brick::assembleGradient(escript::Da
1469                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_NN[0]-1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_NN[0]-1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1470                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE[1]));                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE[1]));
1471                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1472                              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 / m_dx[0];
1473                              o[INDEX3(i,1,0,numComp,3)] = (f_110[i]+f_111[i]-f_100[i]-f_101[i])*C4 / h1;                              o[INDEX3(i,1,0,numComp,3)] = (f_110[i]+f_111[i]-f_100[i]-f_101[i])*C4 / m_dx[1];
1474                              o[INDEX3(i,2,0,numComp,3)] = (f_101[i]+f_111[i]-f_100[i]-f_110[i])*C4 / h2;                              o[INDEX3(i,2,0,numComp,3)] = (f_101[i]+f_111[i]-f_100[i]-f_110[i])*C4 / m_dx[2];
1475                          } // end of component loop i                          } // end of component loop i
1476                      } // end of k1 loop                      } // end of k1 loop
1477                  } // end of k2 loop                  } // end of k2 loop
# Line 1491  void Brick::assembleGradient(escript::Da Line 1490  void Brick::assembleGradient(escript::Da
1490                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1491                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE[0]));
1492                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1493                              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 / m_dx[0];
1494                              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;                              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 / m_dx[1];
1495                              o[INDEX3(i,2,0,numComp,3)] = (f_001[i]+f_101[i]-f_000[i]-f_100[i])*C4 / h2;                              o[INDEX3(i,2,0,numComp,3)] = (f_001[i]+f_101[i]-f_000[i]-f_100[i])*C4 / m_dx[2];
1496                          } // end of component loop i                          } // end of component loop i
1497                      } // end of k0 loop                      } // end of k0 loop
1498                  } // end of k2 loop                  } // end of k2 loop
# Line 1512  void Brick::assembleGradient(escript::Da Line 1511  void Brick::assembleGradient(escript::Da
1511                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_NN[1]-1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_NN[1]-1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1512                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE[0]));
1513                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1514                              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 / m_dx[0];
1515                              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;                              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 / m_dx[1];
1516                              o[INDEX3(i,2,0,numComp,3)] = (f_011[i]+f_111[i]-f_010[i]-f_110[i])*C4 / h2;                              o[INDEX3(i,2,0,numComp,3)] = (f_011[i]+f_111[i]-f_010[i]-f_110[i])*C4 / m_dx[2];
1517                          } // end of component loop i                          } // end of component loop i
1518                      } // end of k0 loop                      } // end of k0 loop
1519                  } // end of k2 loop                  } // end of k2 loop
# Line 1533  void Brick::assembleGradient(escript::Da Line 1532  void Brick::assembleGradient(escript::Da
1532                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1533                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE[0]));
1534                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1535                              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 / m_dx[0];
1536                              o[INDEX3(i,1,0,numComp,3)] = (f_010[i]+f_110[i]-f_000[i]-f_100[i])*C4 / h1;                              o[INDEX3(i,1,0,numComp,3)] = (f_010[i]+f_110[i]-f_000[i]-f_100[i])*C4 / m_dx[1];
1537                              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])*C4 / h2;                              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])*C4 / m_dx[2];
1538                          } // end of component loop i                          } // end of component loop i
1539                      } // end of k0 loop                      } // end of k0 loop
1540                  } // end of k1 loop                  } // end of k1 loop
# Line 1554  void Brick::assembleGradient(escript::Da Line 1553  void Brick::assembleGradient(escript::Da
1553                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_NN[2]-1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_NN[2]-1, m_NN[0],m_NN[1])), numComp*sizeof(double));
1554                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE[0]));
1555                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
1556                              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 / m_dx[0];
1557                              o[INDEX3(i,1,0,numComp,3)] = (f_011[i]+f_111[i]-f_001[i]-f_101[i])*C4 / h1;                              o[INDEX3(i,1,0,numComp,3)] = (f_011[i]+f_111[i]-f_001[i]-f_101[i])*C4 / m_dx[1];
1558                              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;                              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 / m_dx[2];
1559                          } // end of component loop i                          } // end of component loop i
1560                      } // end of k0 loop                      } // end of k0 loop
1561                  } // end of k1 loop                  } // end of k1 loop
# Line 1569  void Brick::assembleGradient(escript::Da Line 1568  void Brick::assembleGradient(escript::Da
1568  void Brick::assembleIntegrate(vector<double>& integrals, escript::Data& arg) const  void Brick::assembleIntegrate(vector<double>& integrals, escript::Data& arg) const
1569  {  {
1570      const dim_t numComp = arg.getDataPointSize();      const dim_t numComp = arg.getDataPointSize();
     const double h0 = m_dx[0];  
     const double h1 = m_dx[1];  
     const double h2 = m_dx[2];  
1571      const index_t left = (m_offset[0]==0 ? 0 : 1);      const index_t left = (m_offset[0]==0 ? 0 : 1);
1572      const index_t bottom = (m_offset[1]==0 ? 0 : 1);      const index_t bottom = (m_offset[1]==0 ? 0 : 1);
1573      const index_t front = (m_offset[2]==0 ? 0 : 1);      const index_t front = (m_offset[2]==0 ? 0 : 1);
1574      const int fs = arg.getFunctionSpace().getTypeCode();      const int fs = arg.getFunctionSpace().getTypeCode();
1575      if (fs == Elements && arg.actsExpanded()) {      if (fs == Elements && arg.actsExpanded()) {
1576          const double w_0 = h0*h1*h2/8.;          const double w_0 = m_dx[0]*m_dx[1]*m_dx[2]/8.;
1577  #pragma omp parallel  #pragma omp parallel
1578          {          {
1579              vector<double> int_local(numComp, 0);              vector<double> int_local(numComp, 0);
# Line 1607  void Brick::assembleIntegrate(vector<dou Line 1603  void Brick::assembleIntegrate(vector<dou
1603          } // end of parallel section          } // end of parallel section
1604    
1605      } else if (fs==ReducedElements || (fs==Elements && !arg.actsExpanded())) {      } else if (fs==ReducedElements || (fs==Elements && !arg.actsExpanded())) {
1606          const double w_0 = h0*h1*h2;          const double w_0 = m_dx[0]*m_dx[1]*m_dx[2];
1607  #pragma omp parallel  #pragma omp parallel
1608          {          {
1609              vector<double> int_local(numComp, 0);              vector<double> int_local(numComp, 0);
# Line 1629  void Brick::assembleIntegrate(vector<dou Line 1625  void Brick::assembleIntegrate(vector<dou
1625          } // end of parallel section          } // end of parallel section
1626    
1627      } else if (fs == FaceElements && arg.actsExpanded()) {      } else if (fs == FaceElements && arg.actsExpanded()) {
1628          const double w_0 = h1*h2/4.;          const double w_0 = m_dx[1]*m_dx[2]/4.;
1629          const double w_1 = h0*h2/4.;          const double w_1 = m_dx[0]*m_dx[2]/4.;
1630          const double w_2 = h0*h1/4.;          const double w_2 = m_dx[0]*m_dx[1]/4.;
1631  #pragma omp parallel  #pragma omp parallel
1632          {          {
1633              vector<double> int_local(numComp, 0);              vector<double> int_local(numComp, 0);
# Line 1737  void Brick::assembleIntegrate(vector<dou Line 1733  void Brick::assembleIntegrate(vector<dou
1733          } // end of parallel section          } // end of parallel section
1734    
1735      } else if (fs==ReducedFaceElements || (fs==FaceElements && !arg.actsExpanded())) {      } else if (fs==ReducedFaceElements || (fs==FaceElements && !arg.actsExpanded())) {
1736          const double w_0 = h1*h2;          const double w_0 = m_dx[1]*m_dx[2];
1737          const double w_1 = h0*h2;          const double w_1 = m_dx[0]*m_dx[2];
1738          const double w_2 = h0*h1;          const double w_2 = m_dx[0]*m_dx[1];
1739  #pragma omp parallel  #pragma omp parallel
1740          {          {
1741              vector<double> int_local(numComp, 0);              vector<double> int_local(numComp, 0);
# Line 2483  void Brick::interpolateNodesOnElements(e Line 2479  void Brick::interpolateNodesOnElements(e
2479      const dim_t numComp = in.getDataPointSize();      const dim_t numComp = in.getDataPointSize();
2480      if (reduced) {      if (reduced) {
2481          out.requireWrite();          out.requireWrite();
         const double c0 = .125;  
2482  #pragma omp parallel  #pragma omp parallel
2483          {          {
2484              vector<double> f_000(numComp);              vector<double> f_000(numComp);
# Line 2508  void Brick::interpolateNodesOnElements(e Line 2503  void Brick::interpolateNodesOnElements(e
2503                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
2504                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE[0],m_NE[1]));                          double* o = out.getSampleDataRW(INDEX3(k0,k1,k2,m_NE[0],m_NE[1]));
2505                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2506                              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]);                              o[INDEX2(i,numComp,0)] = (f_000[i] + f_001[i] + f_010[i] + f_011[i] + f_100[i] + f_101[i] + f_110[i] + f_111[i])/8;
2507                          } // end of component loop i                          } // end of component loop i
2508                      } // end of k0 loop                      } // end of k0 loop
2509                  } // end of k1 loop                  } // end of k1 loop
# Line 2567  void Brick::interpolateNodesOnFaces(escr Line 2562  void Brick::interpolateNodesOnFaces(escr
2562      const dim_t numComp = in.getDataPointSize();      const dim_t numComp = in.getDataPointSize();
2563      if (reduced) {      if (reduced) {
2564          out.requireWrite();          out.requireWrite();
         const double c0 = .25;  
2565  #pragma omp parallel  #pragma omp parallel
2566          {          {
2567              vector<double> f_000(numComp);              vector<double> f_000(numComp);
# Line 2588  void Brick::interpolateNodesOnFaces(escr Line 2582  void Brick::interpolateNodesOnFaces(escr
2582                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_011[0], in.getSampleDataRO(INDEX3(0,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
2583                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE[1]));                          double* o = out.getSampleDataRW(m_faceOffset[0]+INDEX2(k1,k2,m_NE[1]));
2584                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2585                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_010[i] + f_011[i]);                              o[INDEX2(i,numComp,0)] = (f_000[i] + f_001[i] + f_010[i] + f_011[i])/4;
2586                          } // end of component loop i                          } // end of component loop i
2587                      } // end of k1 loop                      } // end of k1 loop
2588                  } // end of k2 loop                  } // end of k2 loop
# Line 2603  void Brick::interpolateNodesOnFaces(escr Line 2597  void Brick::interpolateNodesOnFaces(escr
2597                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_NN[0]-1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(m_NN[0]-1,k1+1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
2598                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE[1]));                          double* o = out.getSampleDataRW(m_faceOffset[1]+INDEX2(k1,k2,m_NE[1]));
2599                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2600                              o[INDEX2(i,numComp,0)] = c0*(f_100[i] + f_101[i] + f_110[i] + f_111[i]);                              o[INDEX2(i,numComp,0)] = (f_100[i] + f_101[i] + f_110[i] + f_111[i])/4;
2601                          } // end of component loop i                          } // end of component loop i
2602                      } // end of k1 loop                      } // end of k1 loop
2603                  } // end of k2 loop                  } // end of k2 loop
# Line 2618  void Brick::interpolateNodesOnFaces(escr Line 2612  void Brick::interpolateNodesOnFaces(escr
2612                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_101[0], in.getSampleDataRO(INDEX3(k0+1,0,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
2613                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[2]+INDEX2(k0,k2,m_NE[0]));
2614                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2615                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_001[i] + f_100[i] + f_101[i]);                              o[INDEX2(i,numComp,0)] = (f_000[i] + f_001[i] + f_100[i] + f_101[i])/4;
2616                          } // end of component loop i                          } // end of component loop i
2617                      } // end of k0 loop                      } // end of k0 loop
2618                  } // end of k2 loop                  } // end of k2 loop
# Line 2633  void Brick::interpolateNodesOnFaces(escr Line 2627  void Brick::interpolateNodesOnFaces(escr
2627                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_NN[1]-1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,m_NN[1]-1,k2+1, m_NN[0],m_NN[1])), numComp*sizeof(double));
2628                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[3]+INDEX2(k0,k2,m_NE[0]));
2629                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2630                              o[INDEX2(i,numComp,0)] = c0*(f_010[i] + f_011[i] + f_110[i] + f_111[i]);                              o[INDEX2(i,numComp,0)] = (f_010[i] + f_011[i] + f_110[i] + f_111[i])/4;
2631                          } // end of component loop i                          } // end of component loop i
2632                      } // end of k0 loop                      } // end of k0 loop
2633                  } // end of k2 loop                  } // end of k2 loop
# Line 2648  void Brick::interpolateNodesOnFaces(escr Line 2642  void Brick::interpolateNodesOnFaces(escr
2642                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_110[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,0, m_NN[0],m_NN[1])), numComp*sizeof(double));
2643                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[4]+INDEX2(k0,k1,m_NE[0]));
2644                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2645                              o[INDEX2(i,numComp,0)] = c0*(f_000[i] + f_010[i] + f_100[i] + f_110[i]);                              o[INDEX2(i,numComp,0)] = (f_000[i] + f_010[i] + f_100[i] + f_110[i])/4;
2646                          } // end of component loop i                          } // end of component loop i
2647                      } // end of k0 loop                      } // end of k0 loop
2648                  } // end of k1 loop                  } // end of k1 loop
# Line 2663  void Brick::interpolateNodesOnFaces(escr Line 2657  void Brick::interpolateNodesOnFaces(escr
2657                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_NN[2]-1, m_NN[0],m_NN[1])), numComp*sizeof(double));                          memcpy(&f_111[0], in.getSampleDataRO(INDEX3(k0+1,k1+1,m_NN[2]-1, m_NN[0],m_NN[1])), numComp*sizeof(double));
2658                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE[0]));                          double* o = out.getSampleDataRW(m_faceOffset[5]+INDEX2(k0,k1,m_NE[0]));
2659                          for (index_t i=0; i < numComp; ++i) {                          for (index_t i=0; i < numComp; ++i) {
2660                              o[INDEX2(i,numComp,0)] = c0*(f_001[i] + f_011[i] + f_101[i] + f_111[i]);                              o[INDEX2(i,numComp,0)] = (f_001[i] + f_011[i] + f_101[i] + f_111[i])/4;
2661                          } // end of component loop i                          } // end of component loop i
2662                      } // end of k0 loop                      } // end of k0 loop
2663                  } // end of k1 loop                  } // end of k1 loop
# Line 2802  void Brick::assemblePDESingle(Paso_Syste Line 2796  void Brick::assemblePDESingle(Paso_Syste
2796          const escript::Data& C, const escript::Data& D,          const escript::Data& C, const escript::Data& D,
2797          const escript::Data& X, const escript::Data& Y) const          const escript::Data& X, const escript::Data& Y) const
2798  {  {
2799      /* GENERATOR SNIP_PDE_SINGLE_PRE TOP */      const double SQRT3 = 1.73205080756887719318;
2800      const double w0 = 0.00093037914038584273081*m_dx[1]*m_dx[2]/m_dx[0];      const double w10 = -m_dx[0]/288;
2801      const double w1 = 0.00093037914038584273081*m_dx[2];      const double w6 = w10*(SQRT3 - 2);
2802      const double w2 = -0.000249294339321148701*m_dx[1];      const double w12 = w10*(-SQRT3 - 2);
2803      const double w3 = 0.00093037914038584273081*m_dx[0]*m_dx[2]/m_dx[1];      const double w4 = w10*(-4*SQRT3 + 7);
2804      const double w4 = -0.000249294339321148701*m_dx[0];      const double w18 = w10*(-4*SQRT3 - 7);
2805      const double w5 = 0.00093037914038584273081*m_dx[1];      const double w11 = m_dx[1]/288;
2806      const double w6 = 0.00093037914038584273081*m_dx[0];      const double w5 = w11*(-SQRT3 + 2);
2807      const double w7 = -0.000249294339321148701*m_dx[0]*m_dx[1]/m_dx[2];      const double w15 = w11*(SQRT3 + 2);
2808      const double w8 = 0.0034722222222222222222*m_dx[2];      const double w2 = w11*(4*SQRT3 - 7);
2809      const double w9 = 0.012958509748503046158*m_dx[0]*m_dx[2]/m_dx[1];      const double w17 = w11*(4*SQRT3 + 7);
2810      const double w10 = -0.0034722222222222222222*m_dx[0];      const double w8 = m_dx[2]/288;
2811      const double w11 = 0.0034722222222222222222*m_dx[1];      const double w1 = w8*(-SQRT3 + 2);
2812      const double w12 = 0.012958509748503046158*m_dx[0];      const double w16 = w8*(SQRT3 + 2);
2813      const double w13 = -0.0034722222222222222222*m_dx[0]*m_dx[1]/m_dx[2];      const double w20 = w8*(4*SQRT3 - 7);
2814      const double w14 = 0.012958509748503046158*m_dx[1]*m_dx[2]/m_dx[0];      const double w21 = w8*(-4*SQRT3 - 7);
2815      const double w15 = 0.012958509748503046158*m_dx[1];      const double w50 = m_dx[0]*m_dx[1]/72;
2816      const double w16 = 0.012958509748503046158*m_dx[2];      const double w65 = -m_dx[0]*m_dx[1]/48;
2817      const double w17 = 0.04836181677178996241*m_dx[1];      const double w35 = w65*(-SQRT3 - 3)/36;
2818      const double w18 = 0.04836181677178996241*m_dx[0];      const double w42 = w65*(SQRT3 - 3)/36;
2819      const double w19 = -0.04836181677178996241*m_dx[0]*m_dx[1]/m_dx[2];      const double w32 = w65*(5*SQRT3 - 9)/36;
2820      const double w20 = -0.000249294339321148701*m_dx[2];      const double w43 = w65*(-5*SQRT3 - 9)/36;
2821      const double w21 = -0.04836181677178996241*m_dx[2];      const double w40 = w65*(-19*SQRT3 - 33)/36;
2822      const double w22 = -0.0034722222222222222222*m_dx[0]*m_dx[2]/m_dx[1];      const double w41 = w65*(19*SQRT3 - 33)/36;
2823      const double w23 = 0.00093037914038584273081*m_dx[0]*m_dx[1]/m_dx[2];      const double w63 = w65*(SQRT3 + 2);
2824      const double w24 = -0.04836181677178996241*m_dx[0]*m_dx[2]/m_dx[1];      const double w67 = w65*(-SQRT3 + 2);
2825      const double w25 = 0.012958509748503046158*m_dx[0]*m_dx[1]/m_dx[2];      const double w51 = -m_dx[0]*m_dx[2]/72;
2826      const double w26 = -0.000249294339321148701*m_dx[0]*m_dx[2]/m_dx[1];      const double w64 = -m_dx[0]*m_dx[2]/48;
2827      const double w27 = -0.0034722222222222222222*m_dx[1]*m_dx[2]/m_dx[0];      const double w34 = w64*(-SQRT3 - 3)/36;
2828      const double w28 = -0.000249294339321148701*m_dx[1]*m_dx[2]/m_dx[0];      const double w37 = w64*(SQRT3 - 3)/36;
2829      const double w29 = -0.04836181677178996241*m_dx[1]*m_dx[2]/m_dx[0];      const double w31 = w64*(5*SQRT3 - 9)/36;
2830      const double w30 = 0.0001966122466178319053*m_dx[1]*m_dx[2];      const double w39 = w64*(-5*SQRT3 - 9)/36;
2831      const double w31 = 0.0001966122466178319053*m_dx[0]*m_dx[2];      const double w44 = w64*(19*SQRT3 + 33)/36;
2832      const double w32 = 0.0001966122466178319053*m_dx[0]*m_dx[1];      const double w45 = w64*(-19*SQRT3 + 33)/36;
2833      const double w33 = 0.0007337668937680108255*m_dx[1]*m_dx[2];      const double w62 = w64*(SQRT3 + 2);
2834      const double w34 = 0.0027384553284542113967*m_dx[0]*m_dx[2];      const double w68 = w64*(-SQRT3 + 2);
2835      const double w35 = 0.0027384553284542113967*m_dx[0]*m_dx[1];      const double w53 = -m_dx[1]*m_dx[2]/72;
2836      const double w36 = 0.0027384553284542113967*m_dx[1]*m_dx[2];      const double w66 = -m_dx[1]*m_dx[2]/48;
2837      const double w37 = 0.0007337668937680108255*m_dx[0]*m_dx[2];      const double w33 = w66*(SQRT3 - 3)/36;
2838      const double w38 = 0.010220054420048834761*m_dx[1]*m_dx[2];      const double w36 = w66*(-SQRT3 - 3)/36;
2839      const double w39 = 0.010220054420048834761*m_dx[0]*m_dx[2];      const double w30 = w66*(5*SQRT3 - 9)/36;
2840      const double w40 = 0.038141762351741127649*m_dx[0]*m_dx[1];      const double w38 = w66*(-5*SQRT3 - 9)/36;
2841      const double w41 = 0.000052682092703316795698*m_dx[0]*m_dx[1];      const double w46 = w66*(19*SQRT3 - 33)/36;
2842      const double w42 = 0.0007337668937680108255*m_dx[0]*m_dx[1];      const double w47 = w66*(-19*SQRT3 - 33)/36;
2843      const double w43 = 0.010220054420048834761*m_dx[0]*m_dx[1];      const double w61 = w66*(SQRT3 + 2);
2844      const double w44 = -0.038141762351741127649*m_dx[0]*m_dx[2];      const double w69 = w66*(-SQRT3 + 2);
2845      const double w45 = -0.000052682092703316795698*m_dx[0]*m_dx[2];      const double w55 = m_dx[0]*m_dx[1]*m_dx[2]/1728;
2846      const double w46 = 0.000052682092703316795698*m_dx[1]*m_dx[2];      const double w57 = w55*(-SQRT3 + 2);
2847      const double w47 = 0.038141762351741127649*m_dx[1]*m_dx[2];      const double w58 = w55*(SQRT3 + 2);
2848      const double w48 = 0.027777777777777777778*m_dx[1]*m_dx[2];      const double w54 = w55*(-4*SQRT3 + 7);
2849      const double w49 = 0.027777777777777777778*m_dx[0]*m_dx[2];      const double w56 = w55*(4*SQRT3 + 7);
2850      const double w50 = 0.055555555555555555556*m_dx[0]*m_dx[1];      const double w59 = w55*(15*SQRT3 + 26);
2851      const double w51 = -0.055555555555555555556*m_dx[0]*m_dx[2];      const double w60 = w55*(-15*SQRT3 + 26);
2852      const double w52 = -0.027777777777777777778*m_dx[0]*m_dx[1];      const double w71 = w55*6*(SQRT3 + 3);
2853      const double w53 = -0.013888888888888888889*m_dx[1]*m_dx[2];      const double w72 = w55*6*(-SQRT3 + 3);
2854      const double w54 = 0.0000415490565535247835*m_dx[0]*m_dx[1]*m_dx[2];      const double w70 = w55*6*(5*SQRT3 + 9);
2855      const double w55 = 0.0005787037037037037037*m_dx[0]*m_dx[1]*m_dx[2];      const double w73 = w55*6*(-5*SQRT3 + 9);
2856      const double w56 = 0.0080603027952983270684*m_dx[0]*m_dx[1]*m_dx[2];      const double w13 = -m_dx[0]*m_dx[1]/(288*m_dx[2]);
2857      const double w57 = 0.0001550631900643071218*m_dx[0]*m_dx[1]*m_dx[2];      const double w23 = w13*(SQRT3 - 2);
2858      const double w58 = 0.002159751624750507693*m_dx[0]*m_dx[1]*m_dx[2];      const double w25 = w13*(-SQRT3 - 2);
2859      const double w59 = 0.03008145955644280058*m_dx[0]*m_dx[1]*m_dx[2];      const double w7 = w13*(-4*SQRT3 + 7);
2860      const double w60 = 0.000011133036149792012194*m_dx[0]*m_dx[1]*m_dx[2];      const double w19 = w13*(4*SQRT3 + 7);
2861      const double w61 = -0.077751058491018276948*m_dx[1]*m_dx[2];      const double w22 = -m_dx[0]*m_dx[2]/(288*m_dx[1]);
2862      const double w62 = -0.077751058491018276948*m_dx[0]*m_dx[2];      const double w3 = w22*(SQRT3 - 2);
2863      const double w63 = -0.077751058491018276948*m_dx[0]*m_dx[1];      const double w9 = w22*(-SQRT3 - 2);
2864      const double w64 = -0.020833333333333333333*m_dx[0]*m_dx[2];      const double w24 = w22*(4*SQRT3 + 7);
2865      const double w65 = -0.020833333333333333333*m_dx[0]*m_dx[1];      const double w26 = w22*(-4*SQRT3 + 7);
2866      const double w66 = -0.020833333333333333333*m_dx[1]*m_dx[2];      const double w27 = -m_dx[1]*m_dx[2]/(288*m_dx[0]);
2867      const double w67 = -0.0055822748423150563848*m_dx[0]*m_dx[1];      const double w0 = w27*(SQRT3 - 2);
2868      const double w68 = -0.0055822748423150563848*m_dx[0]*m_dx[2];      const double w14 = w27*(-SQRT3 - 2);
2869      const double w69 = -0.0055822748423150563848*m_dx[1]*m_dx[2];      const double w28 = w27*(-4*SQRT3 + 7);
2870      const double w70 = 0.061320326520293008568*m_dx[0]*m_dx[1]*m_dx[2];      const double w29 = w27*(4*SQRT3 + 7);
     const double w71 = 0.01643073197072526838*m_dx[0]*m_dx[1]*m_dx[2];  
     const double w72 = 0.004402601362608064953*m_dx[0]*m_dx[1]*m_dx[2];  
     const double w73 = 0.0011796734797069914318*m_dx[0]*m_dx[1]*m_dx[2];  
     /* GENERATOR SNIP_PDE_SINGLE_PRE BOTTOM */  
2871    
2872      rhs.requireWrite();      rhs.requireWrite();
2873  #pragma omp parallel  #pragma omp parallel
# Line 2892  void Brick::assemblePDESingle(Paso_Syste Line 2882  void Brick::assemblePDESingle(Paso_Syste
2882                          vector<double> EM_S(8*8, 0);                          vector<double> EM_S(8*8, 0);
2883                          vector<double> EM_F(8, 0);                          vector<double> EM_F(8, 0);
2884                          const index_t e = k0 + m_NE[0]*k1 + m_NE[0]*m_NE[1]*k2;                          const index_t e = k0 + m_NE[0]*k1 + m_NE[0]*m_NE[1]*k2;
                         /* GENERATOR SNIP_PDE_SINGLE TOP */  
2885                          ///////////////                          ///////////////
2886                          // process A //                          // process A //
2887                          ///////////////                          ///////////////
# Line 3547  void Brick::assemblePDESingle(Paso_Syste Line 3536  void Brick::assemblePDESingle(Paso_Syste
3536                                  EM_S[INDEX2(7,6,8)]+=tmp100 + tmp156 + tmp157 + tmp161 + tmp201 + tmp204 + tmp205 + tmp207 + tmp208 + tmp209 + tmp211 + tmp247 + tmp248 + tmp249 + tmp250 + tmp251 + tmp252 + tmp60 + tmp65 + tmp88;                                  EM_S[INDEX2(7,6,8)]+=tmp100 + tmp156 + tmp157 + tmp161 + tmp201 + tmp204 + tmp205 + tmp207 + tmp208 + tmp209 + tmp211 + tmp247 + tmp248 + tmp249 + tmp250 + tmp251 + tmp252 + tmp60 + tmp65 + tmp88;
3537                                  EM_S[INDEX2(7,7,8)]+=tmp118 + tmp121 + tmp214 + tmp226 + tmp228 + tmp271 + tmp273 + tmp289 + tmp303 + tmp304 + tmp305 + tmp306 + tmp307 + tmp308 + tmp309 + tmp310 + tmp311 + tmp312 + tmp313 + tmp314 + tmp315 + tmp316 + tmp317 + tmp318;                                  EM_S[INDEX2(7,7,8)]+=tmp118 + tmp121 + tmp214 + tmp226 + tmp228 + tmp271 + tmp273 + tmp289 + tmp303 + tmp304 + tmp305 + tmp306 + tmp307 + tmp308 + tmp309 + tmp310 + tmp311 + tmp312 + tmp313 + tmp314 + tmp315 + tmp316 + tmp317 + tmp318;
3538                              } else { // constant data                              } else { // constant data
3539                                  const double A_00 = A_p[INDEX2(0,0,3)];                                  const double Aw00 = 8*A_p[INDEX2(0,0,3)]*w27;
3540                                  const double A_01 = A_p[INDEX2(0,1,3)];                                  const double Aw01 = 12*A_p[INDEX2(0,1,3)]*w8;
3541                                  const double A_02 = A_p[INDEX2(0,2,3)];                                  const double Aw02 = 12*A_p[INDEX2(0,2,3)]*w11;
3542                                  const double A_10 = A_p[INDEX2(1,0,3)];                                  const double Aw10 = 12*A_p[INDEX2(1,0,3)]*w8;
3543                                  const double A_11 = A_p[INDEX2(1,1,3)];                                  const double Aw11 = 8*A_p[INDEX2(1,1,3)]*w22;
3544                                  const double A_12 = A_p[INDEX2(1,2,3)];                                  const double Aw12 = 12*A_p[INDEX2(1,2,3)]*w10;
3545                                  const double A_20 = A_p[INDEX2(2,0,3)];                                  const double Aw20 = 12*A_p[INDEX2(2,0,3)]*w11;
3546                                  const double A_21 = A_p[INDEX2(2,1,3)];                                  const double Aw21 = 12*A_p[INDEX2(2,1,3)]*w10;
3547                                  const double A_22 = A_p[INDEX2(2,2,3)];                                  const double Aw22 = 8*A_p[INDEX2(2,2,3)]*w13;
3548                                  const double tmp0 = 24*w11*(-A_02 + A_20);                                  const double tmp0 = Aw01 + Aw10;
3549                                  const double tmp1 = 24*w10*(A_12 - A_21);                                  const double tmp1 = Aw01 - Aw10;
3550                                  const double tmp2 = 12*w8*(A_01 + A_10);                                  const double tmp2 = -Aw01 - Aw10;
3551                                  const double tmp3 = 12*w11*(-A_02 + A_20);                                  const double tmp3 = -Aw01 + Aw10;
3552                                  const double tmp4 = 12*w10*(A_12 - A_21);                                  const double tmp4 = Aw02 + Aw20;
3553                                  const double tmp5 = 24*w8*(-A_01 - A_10);                                  const double tmp5 = Aw02 - Aw20;
3554                                  const double tmp6 = 12*w11*(-A_02 - A_20);                                  const double tmp6 = -Aw02 - Aw20;
3555                                  const double tmp7 = 24*w10*(-A_12 + A_21);                                  const double tmp7 = -Aw02 + Aw20;
3556                                  const double tmp8 = 24*w8*(A_01 - A_10);                                  const double tmp8 = Aw12 + Aw21;
3557                                  const double tmp9 = 24*w11*(A_02 - A_20);                                  const double tmp9 = Aw12 - Aw21;
3558                                  const double tmp10 = 12*w10*(A_12 + A_21);                                  const double tmp10 = -Aw12 - Aw21;
3559                                  const double tmp11 = 24*w8*(-A_01 + A_10);                                  const double tmp11 = -Aw12 + Aw21;
3560                                  const double tmp12 = 12*w8*(-A_01 - A_10);                                  EM_S[INDEX2(0,0,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 + 2*tmp4 + 2*tmp10;
3561                                  const double tmp13 = 12*w11*(A_02 - A_20);                                  EM_S[INDEX2(0,1,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + tmp10 + 2*tmp1 + 2*tmp5;
3562                                  const double tmp14 = 24*w8*(A_01 + A_10);                                  EM_S[INDEX2(0,2,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp3 + tmp4 + 2*tmp11;
3563                                  const double tmp15 = 12*w11*(A_02 + A_20);                                  EM_S[INDEX2(0,3,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp5 + tmp11 + 2*tmp2;
3564                                  const double tmp16 = 12*w10*(-A_12 - A_21);                                  EM_S[INDEX2(0,4,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp7 + 2*tmp9 + tmp0;
3565                                  const double tmp17 = 12*w10*(-A_12 + A_21);                                  EM_S[INDEX2(0,5,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + 2*tmp6 + tmp1 + tmp9;
3566                                  const double tmp18 = 24*w11*(-A_02 - A_20);                                  EM_S[INDEX2(0,6,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + 2*tmp8 + tmp3 + tmp7;
3567                                  const double tmp19 = 12*w8*(A_01 - A_10);                                  EM_S[INDEX2(0,7,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp8 + tmp2 + tmp6;
3568                                  const double tmp20 = 24*w10*(A_12 + A_21);                                  EM_S[INDEX2(1,0,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + 2*tmp7 + 2*tmp3 + tmp10;
3569                                  const double tmp21 = 24*w11*(A_02 + A_20);                                  EM_S[INDEX2(1,1,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp6 + 2*tmp10 + 2*tmp2;
3570                                  const double tmp22 = 12*w8*(-A_01 + A_10);                                  EM_S[INDEX2(1,2,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + 2*tmp0 + tmp11 + tmp7;
3571                                  const double tmp23 = 24*w10*(-A_12 - A_21);                                  EM_S[INDEX2(1,3,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + tmp6 + 2*tmp11 + 2*tmp1;
3572                                  EM_S[INDEX2(0,0,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp21 + tmp23;                                  EM_S[INDEX2(1,4,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + 2*tmp4 + tmp3 + tmp9;
3573                                  EM_S[INDEX2(0,1,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp16 + tmp8 + tmp9;                                  EM_S[INDEX2(1,5,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp9 + tmp2 + 2*tmp5;
3574                                  EM_S[INDEX2(0,2,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp11 + tmp15 + tmp7;                                  EM_S[INDEX2(1,6,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp8 + tmp4 + tmp0;
3575                                  EM_S[INDEX2(0,3,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp17 + tmp5;                                  EM_S[INDEX2(1,7,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp5 + tmp1 + 2*tmp8;
3576                                  EM_S[INDEX2(0,4,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp1 + tmp2;                                  EM_S[INDEX2(2,0,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp9 + tmp4 + 2*tmp1;
3577                                  EM_S[INDEX2(0,5,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp18 + tmp19 + tmp4;                                  EM_S[INDEX2(2,1,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp5 + 2*tmp0 + tmp9;
3578                                  EM_S[INDEX2(0,6,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp20 + tmp22 + tmp3;                                  EM_S[INDEX2(2,2,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp8 + 2*tmp4 + 2*tmp2;
3579                                  EM_S[INDEX2(0,7,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp12 + tmp6;                                  EM_S[INDEX2(2,3,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + tmp8 + 2*tmp3 + 2*tmp5;
3580                                  EM_S[INDEX2(1,0,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp11 + tmp16;                                  EM_S[INDEX2(2,4,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp1 + 2*tmp10 + tmp7;
3581                                  EM_S[INDEX2(1,1,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp18 + tmp23 + tmp5;                                  EM_S[INDEX2(2,5,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp10 + tmp0 + tmp6;
3582                                  EM_S[INDEX2(1,2,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp14 + tmp17 + tmp3;                                  EM_S[INDEX2(2,6,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp7 + tmp2 + 2*tmp11;
3583                                  EM_S[INDEX2(1,3,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp6 + tmp7 + tmp8;                                  EM_S[INDEX2(2,7,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + tmp11 + 2*tmp6 + tmp3;
3584                                  EM_S[INDEX2(1,4,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp21 + tmp22 + tmp4;                                  EM_S[INDEX2(3,0,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp7 + tmp9 + 2*tmp2;
3585                                  EM_S[INDEX2(1,5,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp1 + tmp12 + tmp9;                                  EM_S[INDEX2(3,1,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp9 + 2*tmp3 + tmp6;
3586                                  EM_S[INDEX2(1,6,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp15 + tmp2;                                  EM_S[INDEX2(3,2,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + 2*tmp7 + tmp8 + 2*tmp1;
3587                                  EM_S[INDEX2(1,7,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp19 + tmp20;                                  EM_S[INDEX2(3,3,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 + 2*tmp6 + 2*tmp8;
3588                                  EM_S[INDEX2(2,0,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp15 + tmp8;                                  EM_S[INDEX2(3,4,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp2 + tmp4 + tmp10;
3589                                  EM_S[INDEX2(2,1,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp14 + tmp4;                                  EM_S[INDEX2(3,5,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp5 + tmp3 + 2*tmp10;
3590                                  EM_S[INDEX2(2,2,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp20 + tmp21 + tmp5;                                  EM_S[INDEX2(3,6,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + tmp11 + tmp1 + 2*tmp4;
3591                                  EM_S[INDEX2(2,3,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp10 + tmp11 + tmp9;                                  EM_S[INDEX2(3,7,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + tmp0 + 2*tmp11 + 2*tmp5;
3592                                  EM_S[INDEX2(2,4,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp19 + tmp23 + tmp3;                                  EM_S[INDEX2(4,0,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + tmp0 + 2*tmp11 + 2*tmp5;
3593                                  EM_S[INDEX2(2,5,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp16 + tmp2 + tmp6;                                  EM_S[INDEX2(4,1,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + tmp11 + tmp1 + 2*tmp4;
3594                                  EM_S[INDEX2(2,6,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp12 + tmp7;                                  EM_S[INDEX2(4,2,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp5 + tmp3 + 2*tmp10;
3595                                  EM_S[INDEX2(2,7,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp18 + tmp22;                                  EM_S[INDEX2(4,3,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp2 + tmp4 + tmp10;
3596                                  EM_S[INDEX2(3,0,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp3 + tmp4 + tmp5;                                  EM_S[INDEX2(4,4,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 + 2*tmp6 + 2*tmp8;
3597                                  EM_S[INDEX2(3,1,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp11 + tmp6;                                  EM_S[INDEX2(4,5,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + 2*tmp7 + tmp8 + 2*tmp1;
3598                                  EM_S[INDEX2(3,2,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp10 + tmp8;                                  EM_S[INDEX2(4,6,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp9 + 2*tmp3 + tmp6;
3599                                  EM_S[INDEX2(3,3,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp18 + tmp20;                                  EM_S[INDEX2(4,7,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp7 + tmp9 + 2*tmp2;
3600                                  EM_S[INDEX2(3,4,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp12 + tmp15 + tmp16;                                  EM_S[INDEX2(5,0,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + tmp11 + 2*tmp6 + tmp3;
3601                                  EM_S[INDEX2(3,5,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp22 + tmp23;                                  EM_S[INDEX2(5,1,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp7 + tmp2 + 2*tmp11;
3602                                  EM_S[INDEX2(3,6,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp19 + tmp21;                                  EM_S[INDEX2(5,2,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp10 + tmp0 + tmp6;
3603                                  EM_S[INDEX2(3,7,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp2 + tmp7 + tmp9;                                  EM_S[INDEX2(5,3,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp1 + 2*tmp10 + tmp7;
3604                                  EM_S[INDEX2(4,0,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp2 + tmp7 + tmp9;                                  EM_S[INDEX2(5,4,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + tmp8 + 2*tmp3 + 2*tmp5;
3605                                  EM_S[INDEX2(4,1,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp19 + tmp21;                                  EM_S[INDEX2(5,5,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp8 + 2*tmp4 + 2*tmp2;
3606                                  EM_S[INDEX2(4,2,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp22 + tmp23;                                  EM_S[INDEX2(5,6,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp5 + 2*tmp0 + tmp9;
3607                                  EM_S[INDEX2(4,3,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp12 + tmp15 + tmp16;                                  EM_S[INDEX2(5,7,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp9 + tmp4 + 2*tmp1;
3608                                  EM_S[INDEX2(4,4,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp18 + tmp20;                                  EM_S[INDEX2(6,0,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp5 + tmp1 + 2*tmp8;
3609                                  EM_S[INDEX2(4,5,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp10 + tmp8;                                  EM_S[INDEX2(6,1,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp8 + tmp4 + tmp0;
3610                                  EM_S[INDEX2(4,6,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp11 + tmp6;                                  EM_S[INDEX2(6,2,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp9 + tmp2 + 2*tmp5;
3611                                  EM_S[INDEX2(4,7,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp3 + tmp4 + tmp5;                                  EM_S[INDEX2(6,3,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + 2*tmp4 + tmp3 + tmp9;
3612                                  EM_S[INDEX2(5,0,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp18 + tmp22;                                  EM_S[INDEX2(6,4,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + tmp6 + 2*tmp11 + 2*tmp1;
3613                                  EM_S[INDEX2(5,1,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp12 + tmp7;                                  EM_S[INDEX2(6,5,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + 2*tmp0 + tmp11 + tmp7;
3614                                  EM_S[INDEX2(5,2,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp16 + tmp2 + tmp6;                                  EM_S[INDEX2(6,6,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp6 + 2*tmp10 + 2*tmp2;
3615                                  EM_S[INDEX2(5,3,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp19 + tmp23 + tmp3;                                  EM_S[INDEX2(6,7,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + 2*tmp7 + 2*tmp3 + tmp10;
3616                                  EM_S[INDEX2(5,4,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp10 + tmp11 + tmp9;                                  EM_S[INDEX2(7,0,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp8 + tmp2 + tmp6;
3617                                  EM_S[INDEX2(5,5,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp20 + tmp21 + tmp5;                                  EM_S[INDEX2(7,1,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + 2*tmp8 + tmp3 + tmp7;
3618                                  EM_S[INDEX2(5,6,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp14 + tmp4;                                  EM_S[INDEX2(7,2,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + 2*tmp6 + tmp1 + tmp9;
3619                                  EM_S[INDEX2(5,7,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp15 + tmp8;                                  EM_S[INDEX2(7,3,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp7 + 2*tmp9 + tmp0;
3620                                  EM_S[INDEX2(6,0,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp19 + tmp20;                                  EM_S[INDEX2(7,4,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp5 + tmp11 + 2*tmp2;
3621                                  EM_S[INDEX2(6,1,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp15 + tmp2;                                  EM_S[INDEX2(7,5,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp3 + tmp4 + 2*tmp11;
3622                                  EM_S[INDEX2(6,2,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp1 + tmp12 + tmp9;                                  EM_S[INDEX2(7,6,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + tmp10 + 2*tmp1 + 2*tmp5;
3623                                  EM_S[INDEX2(6,3,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp21 + tmp22 + tmp4;                                  EM_S[INDEX2(7,7,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 + 2*tmp4 + 2*tmp10;
                                 EM_S[INDEX2(6,4,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp6 + tmp7 + tmp8;  
                                 EM_S[INDEX2(6,5,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp14 + tmp17 + tmp3;  
                                 EM_S[INDEX2(6,6,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp18 + tmp23 + tmp5;  
                                 EM_S[INDEX2(6,7,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp11 + tmp16;  
                                 EM_S[INDEX2(7,0,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp12 + tmp6;  
                                 EM_S[INDEX2(7,1,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp20 + tmp22 + tmp3;  
                                 EM_S[INDEX2(7,2,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp18 + tmp19 + tmp4;  
                                 EM_S[INDEX2(7,3,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp1 + tmp2;  
                                 EM_S[INDEX2(7,4,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp17 + tmp5;  
                                 EM_S[INDEX2(7,5,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp11 + tmp15 + tmp7;  
                                 EM_S[INDEX2(7,6,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp16 + tmp8 + tmp9;  
                                 EM_S[INDEX2(7,7,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp21 + tmp23;  
3624                              }                              }
3625                          }                          }
3626                          ///////////////                          ///////////////
# Line 4006  void Brick::assemblePDESingle(Paso_Syste Line 3983  void Brick::assemblePDESingle(Paso_Syste
3983                                  EM_S[INDEX2(7,6,8)]+=B_0_0*w30 + B_0_1*w46 + B_0_6*w47 + B_0_7*w38 + tmp122 + tmp123 + tmp124 + tmp125 + tmp126 + tmp127 + tmp130 + tmp131 + tmp148 + tmp149;                                  EM_S[INDEX2(7,6,8)]+=B_0_0*w30 + B_0_1*w46 + B_0_6*w47 + B_0_7*w38 + tmp122 + tmp123 + tmp124 + tmp125 + tmp126 + tmp127 + tmp130 + tmp131 + tmp148 + tmp149;
3984                                  EM_S[INDEX2(7,7,8)]+=B_0_0*w46 + B_0_1*w30 + B_0_6*w38 + B_0_7*w47 - B_1_0*w45 + B_1_2*w31 + B_1_5*w39 - B_1_7*w44 + B_2_0*w41 + B_2_3*w43 + B_2_4*w32 + B_2_7*w40 + tmp150 + tmp151 + tmp166 + tmp167 + tmp168 + tmp169;                                  EM_S[INDEX2(7,7,8)]+=B_0_0*w46 + B_0_1*w30 + B_0_6*w38 + B_0_7*w47 - B_1_0*w45 + B_1_2*w31 + B_1_5*w39 - B_1_7*w44 + B_2_0*w41 + B_2_3*w43 + B_2_4*w32 + B_2_7*w40 + tmp150 + tmp151 + tmp166 + tmp167 + tmp168 + tmp169;
3985                              } else { // constant data                              } else { // constant data
3986                                  const double B_0 = B_p[0];                                  const double wB0 = B_p[0]*w53;
3987                                  const double B_1 = B_p[1];                                  const double wB1 = B_p[1]*w51;
3988                                  const double B_2 = B_p[2];                                  const double wB2 = B_p[2]*w50;
3989                                  EM_S[INDEX2(0,0,8)]+=4*B_0*w53 + B_1*w51 - B_2*w50;                                  EM_S[INDEX2(0,0,8)]+= 4*wB0 + 4*wB1 - 4*wB2;
3990                                  EM_S[INDEX2(0,1,8)]+=4*B_0*w53 - B_1*w49 + B_2*w52;                                  EM_S[INDEX2(0,1,8)]+= 4*wB0 + 2*wB1 - 2*wB2;
3991                                  EM_S[INDEX2(0,2,8)]+=-B_0*w48 + B_1*w51 + B_2*w52;                                  EM_S[INDEX2(0,2,8)]+= 2*wB0 + 4*wB1 - 2*wB2;
3992                                  EM_S[INDEX2(0,3,8)]+=-B_0*w48 - B_1*w49 + B_2*w52/2;                                  EM_S[INDEX2(0,3,8)]+= 2*wB0 + 2*wB1 - wB2;
3993                                  EM_S[INDEX2(0,4,8)]+=-B_0*w48 - B_1*w49 - B_2*w50;                                  EM_S[INDEX2(0,4,8)]+= 2*wB0 + 2*wB1 - 4*wB2;
3994                                  EM_S[INDEX2(0,5,8)]+=-B_0*w48 + B_1*w51/4 + B_2*w52;                                  EM_S[INDEX2(0,5,8)]+= 2*wB0 +   wB1 - 2*wB2;
3995                                  EM_S[INDEX2(0,6,8)]+=B_0*w53 - B_1*w49 + B_2*w52;                                  EM_S[INDEX2(0,6,8)]+=   wB0 + 2*wB1 - 2*wB2;
3996                                  EM_S[INDEX2(0,7,8)]+=B_0*w53 + B_1*w51/4 + B_2*w52/2;                                  EM_S[INDEX2(0,7,8)]+=   wB0 +   wB1 - wB2;
3997                                  EM_S[INDEX2(1,0,8)]+=-4*B_0*w53 - B_1*w49 + B_2*w52;                                  EM_S[INDEX2(1,0,8)]+=-4*wB0 + 2*wB1 - 2*wB2;
3998                                  EM_S[INDEX2(1,1,8)]+=-4*B_0*w53 + B_1*w51 - B_2*w50;                                  EM_S[INDEX2(1,1,8)]+=-4*wB0 + 4*wB1 - 4*wB2;
3999                                  EM_S[INDEX2(1,2,8)]+=B_0*w48 - B_1*w49 + B_2*w52/2;                                  EM_S[INDEX2(1,2,8)]+=-2*wB0 + 2*wB1 - wB2;
4000                                  EM_S[INDEX2(1,3,8)]+=B_0*w48 + B_1*w51 + B_2*w52;                                  EM_S[INDEX2(1,3,8)]+=-2*wB0 + 4*wB1 - 2*wB2;
4001                                  EM_S[INDEX2(1,4,8)]+=B_0*w48 + B_1*w51/4 + B_2*w52;                                  EM_S[INDEX2(1,4,8)]+=-2*wB0 +   wB1 - 2*wB2;
4002                                  EM_S[INDEX2(1,5,8)]+=B_0*w48 - B_1*w49 - B_2*w50;                                  EM_S[INDEX2(1,5,8)]+=-2*wB0 + 2*wB1 - 4*wB2;
4003                                  EM_S[INDEX2(1,6,8)]+=-B_0*w53 + B_1*w51/4 + B_2*w52/2;                                  EM_S[INDEX2(1,6,8)]+=  -wB0 +   wB1 - wB2;
4004                                  EM_S[INDEX2(1,7,8)]+=-B_0*w53 - B_1*w49 + B_2*w52;                                  EM_S[INDEX2(1,7,8)]+=  -wB0 + 2*wB1 - 2*wB2;
4005                                  EM_S[INDEX2(2,0,8)]+=-B_0*w48 - B_1*w51 + B_2*w52;                                  EM_S[INDEX2(2,0,8)]+= 2*wB0 - 4*wB1 - 2*wB2;
4006                                  EM_S[INDEX2(2,1,8)]+=-B_0*w48 + B_1*w49 + B_2*w52/2;                                  EM_S[INDEX2(2,1,8)]+= 2*wB0 - 2*wB1 - wB2;
4007                                  EM_S[INDEX2(2,2,8)]+=4*B_0*w53 - B_1*w51 - B_2*w50;                                  EM_S[INDEX2(2,2,8)]+= 4*wB0 - 4*wB1 - 4*wB2;
4008                                  EM_S[INDEX2(2,3,8)]+=4*B_0*w53 + B_1*w49 + B_2*w52;                                  EM_S[INDEX2(2,3,8)]+= 4*wB0 - 2*wB1 - 2*wB2;
4009                                  EM_S[INDEX2(2,4,8)]+=B_0*w53 + B_1*w49 + B_2*w52;                                  EM_S[INDEX2(2,4,8)]+=   wB0 - 2*wB1 - 2*wB2;
4010                                  EM_S[INDEX2(2,5,8)]+=B_0*w53 - B_1*w51/4 + B_2*w52/2;                                  EM_S[INDEX2(2,5,8)]+=   wB0 -   wB1 - wB2;
4011                                  EM_S[INDEX2(2,6,8)]+=-B_0*w48 + B_1*w49 - B_2*w50;                                  EM_S[INDEX2(2,6,8)]+= 2*wB0 - 2*wB1 - 4*wB2;
4012                                  EM_S[INDEX2(2,7,8)]+=-B_0*w48 - B_1*w51/4 + B_2*w52;                                  EM_S[INDEX2(2,7,8)]+= 2*wB0 -   wB1 - 2*wB2;
4013                                  EM_S[INDEX2(3,0,8)]+=B_0*w48 + B_1*w49 + B_2*w52/2;                                  EM_S[INDEX2(3,0,8)]+=-2*wB0 - 2*wB1 - wB2;
4014                                  EM_S[INDEX2(3,1,8)]+=B_0*w48 - B_1*w51 + B_2*w52;                                  EM_S[INDEX2(3,1,8)]+=-2*wB0 - 4*wB1 - 2*wB2;
4015                                  EM_S[INDEX2(3,2,8)]+=-4*B_0*w53 + B_1*w49 + B_2*w52;                                  EM_S[INDEX2(3,2,8)]+=-4*wB0 - 2*wB1 - 2*wB2;
4016                                  EM_S[INDEX2(3,3,8)]+=-4*B_0*w53 - B_1*w51 - B_2*w50;                                  EM_S[INDEX2(3,3,8)]+=-4*wB0 - 4*wB1 - 4*wB2;
4017                                  EM_S[INDEX2(3,4,8)]+=-B_0*w53 - B_1*w51/4 + B_2*w52/2;                                  EM_S[INDEX2(3,4,8)]+=  -wB0 -   wB1 - wB2;
4018                                  EM_S[INDEX2(3,5,8)]+=-B_0*w53 + B_1*w49 + B_2*w52;                                  EM_S[INDEX2(3,5,8)]+=  -wB0 - 2*wB1 - 2*wB2;
4019                                  EM_S[INDEX2(3,6,8)]+=B_0*w48 - B_1*w51/4 + B_2*w52;                                  EM_S[INDEX2(3,6,8)]+=-2*wB0 -   wB1 - 2*wB2;
4020                                  EM_S[INDEX2(3,7,8)]+=B_0*w48 + B_1*w49 - B_2*w50;                                  EM_S[INDEX2(3,7,8)]+=-2*wB0 - 2*wB1 - 4*wB2;
4021                                  EM_S[INDEX2(4,0,8)]+=-B_0*w48 - B_1*w49 + B_2*w50;                                  EM_S[INDEX2(4,0,8)]+= 2*wB0 + 2*wB1 + 4*wB2;
4022                                  EM_S[INDEX2(4,1,8)]+=-B_0*w48 + B_1*w51/4 - B_2*w52;                                  EM_S[INDEX2(4,1,8)]+= 2*wB0 +   wB1 + 2*wB2;
4023                                  EM_S[INDEX2(4,2,8)]+=B_0*w53 - B_1*w49 - B_2*w52;                                  EM_S[INDEX2(4,2,8)]+=   wB0 + 2*wB1 + 2*wB2;
4024                                  EM_S[INDEX2(4,3,8)]+=B_0*w53 + B_1*w51/4 + B_2*w50/4;                                  EM_S[INDEX2(4,3,8)]+=   wB0 +   wB1 + wB2;
4025                                  EM_S[INDEX2(4,4,8)]+=4*B_0*w53 + B_1*w51 + B_2*w50;                                  EM_S[INDEX2(4,4,8)]+= 4*wB0 + 4*wB1 + 4*wB2;
4026                                  EM_S[INDEX2(4,5,8)]+=4*B_0*w53 - B_1*w49 - B_2*w52;                                  EM_S[INDEX2(4,5,8)]+= 4*wB0 + 2*wB1 + 2*wB2;
4027                                  EM_S[INDEX2(4,6,8)]+=-B_0*w48 + B_1*w51 - B_2*w52;                                  EM_S[INDEX2(4,6,8)]+= 2*wB0 + 4*wB1 + 2*wB2;
4028                                  EM_S[INDEX2(4,7,8)]+=-B_0*w48 - B_1*w49 + B_2*w50/4;                                  EM_S[INDEX2(4,7,8)]+= 2*wB0 + 2*wB1 + wB2;
4029                                  EM_S[INDEX2(5,0,8)]+=B_0*w48 + B_1*w51/4 - B_2*w52;                                  EM_S[INDEX2(5,0,8)]+=-2*wB0 +   wB1 + 2*wB2;
4030                                  EM_S[INDEX2(5,1,8)]+=B_0*w48 - B_1*w49 + B_2*w50;                                  EM_S[INDEX2(5,1,8)]+=-2*wB0 + 2*wB1 + 4*wB2;
4031                                  EM_S[INDEX2(5,2,8)]+=-B_0*w53 + B_1*w51/4 + B_2*w50/4;                                  EM_S[INDEX2(5,2,8)]+=  -wB0 +   wB1 + wB2;
4032                                  EM_S[INDEX2(5,3,8)]+=-B_0*w53 - B_1*w49 - B_2*w52;                                  EM_S[INDEX2(5,3,8)]+=  -wB0 + 2*wB1 + 2*wB2;
4033                                  EM_S[INDEX2(5,4,8)]+=2*B_0*w48 - B_1*w49 - B_2*w52;                                  EM_S[INDEX2(5,4,8)]+=-4*wB0 + 2*wB1 + 2*wB2;
4034                                  EM_S[INDEX2(5,5,8)]+=-4*B_0*w53 + B_1*w51 + B_2*w50;                                  EM_S[INDEX2(5,5,8)]+=-4*wB0 + 4*wB1 + 4*wB2;
4035                                  EM_S[INDEX2(5,6,8)]+=B_0*w48 - B_1*w49 + B_2*w50/4;                                  EM_S[INDEX2(5,6,8)]+=-2*wB0 + 2*wB1 + wB2;
4036                                  EM_S[INDEX2(5,7,8)]+=B_0*w48 + B_1*w51 - B_2*w52;                                  EM_S[INDEX2(5,7,8)]+=-2*wB0 + 4*wB1 + 2*wB2;
4037                                  EM_S[INDEX2(6,0,8)]+=B_0*w53 + B_1*w49 - B_2*w52;                                  EM_S[INDEX2(6,0,8)]+=   wB0 - 2*wB1 + 2*wB2;
4038                                  EM_S[INDEX2(6,1,8)]+=B_0*w53 - B_1*w51/4 + B_2*w50/4;                                  EM_S[INDEX2(6,1,8)]+=   wB0 -   wB1 + wB2;
4039                                  EM_S[INDEX2(6,2,8)]+=-B_0*w48 + B_1*w49 + B_2*w50;                                  EM_S[INDEX2(6,2,8)]+= 2*wB0 - 2*wB1 + 4*wB2;
4040                                  EM_S[INDEX2(6,3,8)]+=-B_0*w48 - B_1*w51/4 - B_2*w52;                                  EM_S[INDEX2(6,3,8)]+= 2*wB0 -   wB1 + 2*wB2;
4041                                  EM_S[INDEX2(6,4,8)]+=-B_0*w48 - B_1*w51 - B_2*w52;                                  EM_S[INDEX2(6,4,8)]+= 2*wB0 - 4*wB1 + 2*wB2;
4042                                  EM_S[INDEX2(6,5,8)]+=-B_0*w48 + B_1*w49 + B_2*w50/4;                                  EM_S[INDEX2(6,5,8)]+= 2*wB0 - 2*wB1 + wB2;
4043                                  EM_S[INDEX2(6,6,8)]+=4*B_0*w53 - B_1*w51 + B_2*w50;                                  EM_S[INDEX2(6,6,8)]+= 4*wB0 - 4*wB1 + 4*wB2;
4044                                  EM_S[INDEX2(6,7,8)]+=4*B_0*w53 + B_1*w49 - B_2*w52;                                  EM_S[INDEX2(6,7,8)]+= 4*wB0 - 2*wB1 + 2*wB2;
4045                                  EM_S[INDEX2(7,0,8)]+=-B_0*w53 - B_1*w51/4 + B_2*w50/4;                                  EM_S[INDEX2(7,0,8)]+=  -wB0 -   wB1 + wB2;
4046                                  EM_S[INDEX2(7,1,8)]+=-B_0*w53 + B_1*w49 - B_2*w52;                                  EM_S[INDEX2(7,1,8)]+=  -wB0 - 2*wB1 + 2*wB2;
4047                                  EM_S[INDEX2(7,2,8)]+=B_0*w48 - B_1*w51/4 - B_2*w52;                                  EM_S[INDEX2(7,2,8)]+=-2*wB0 -   wB1 + 2*wB2;
4048                                  EM_S[INDEX2(7,3,8)]+=B_0*w48 + B_1*w49 + B_2*w50;                                  EM_S[INDEX2(7,3,8)]+=-2*wB0 - 2*wB1 + 4*wB2;
4049                                  EM_S[INDEX2(7,4,8)]+=B_0*w48 + B_1*w49 + B_2*w50/4;                                  EM_S[INDEX2(7,4,8)]+=-2*wB0 - 2*wB1 + wB2;
4050                                  EM_S[INDEX2(7,5,8)]+=B_0*w48 - B_1*w51 - B_2*w52;                                  EM_S[INDEX2(7,5,8)]+=-2*wB0 - 4*wB1 + 2*wB2;
4051                                  EM_S[INDEX2(7,6,8)]+=-4*B_0*w53 + B_1*w49 - B_2*w52;                                  EM_S[INDEX2(7,6,8)]+=-4*wB0 - 2*wB1 + 2*wB2;
4052                                  EM_S[INDEX2(7,7,8)]+=-4*B_0*w53 - B_1*w51 + B_2*w50;                                  EM_S[INDEX2(7,7,8)]+=-4*wB0 - 4*wB1 + 4*wB2;
4053                              }                              }
4054                          }                          }
4055                          ///////////////                          ///////////////
# Line 4435  void Brick::assemblePDESingle(Paso_Syste Line 4412  void Brick::assemblePDESingle(Paso_Syste
4412                                  EM_S[INDEX2(7,6,8)]+=-C_0_0*w46 - C_0_1*w30 - C_0_6*w38 - C_0_7*w47 + tmp122 + tmp123 + tmp124 + tmp125 + tmp126 + tmp127 + tmp130 + tmp131 + tmp148 + tmp149;                                  EM_S[INDEX2(7,6,8)]+=-C_0_0*w46 - C_0_1*w30 - C_0_6*w38 - C_0_7*w47 + tmp122 + tmp123 + tmp124 + tmp125 + tmp126 + tmp127 + tmp130 + tmp131 + tmp148 + tmp149;
4413                                  EM_S[INDEX2(7,7,8)]+=C_0_0*w46 + C_0_1*w30 + C_0_6*w38 + C_0_7*w47 - C_1_0*w45 + C_1_2*w31 + C_1_5*w39 - C_1_7*w44 + C_2_0*w41 + C_2_3*w43 + C_2_4*w32 + C_2_7*w40 + tmp150 + tmp151 + tmp166 + tmp167 + tmp168 + tmp169;                                  EM_S[INDEX2(7,7,8)]+=C_0_0*w46 + C_0_1*w30 + C_0_6*w38 + C_0_7*w47 - C_1_0*w45 + C_1_2*w31 + C_1_5*w39 - C_1_7*w44 + C_2_0*w41 + C_2_3*w43 + C_2_4*w32 + C_2_7*w40 + tmp150 + tmp151 + tmp166 + tmp167 + tmp168 + tmp169;
4414                              } else { // constant data                              } else { // constant data
4415                                  const double C_0 = C_p[0];                                  const double wC0 = C_p[0]*w53;
4416                                  const double C_1 = C_p[1];                                  const double wC1 = C_p[1]*w51;
4417                                  const double C_2 = C_p[2];                                  const double wC2 = C_p[2]*w50;
4418                                  EM_S[INDEX2(0,0,8)]+=4*C_0*w53 + C_1*w51 - C_2*w50;                                  EM_S[INDEX2(0,0,8)]+= 4*wC0 + 4*wC1 - 4*wC2;
4419                                  EM_S[INDEX2(0,1,8)]+=-4*C_0*w53 - C_1*w49 + C_2*w52;                                  EM_S[INDEX2(0,1,8)]+=-4*wC0 + 2*wC1 - 2*wC2;
4420                                  EM_S[INDEX2(0,2,8)]+=-C_0*w48 - C_1*w51 + C_2*w52;                                  EM_S[INDEX2(0,2,8)]+= 2*wC0 - 4*wC1 - 2*wC2;
4421                                  EM_S[INDEX2(0,3,8)]+=C_0*w48 + C_1*w49 + C_2*w52/2;                                  EM_S[INDEX2(0,3,8)]+=-2*wC0 - 2*wC1 -   wC2;
4422                                  EM_S[INDEX2(0,4,8)]+=-C_0*w48 - C_1*w49 + C_2*w50;                                  EM_S[INDEX2(0,4,8)]+= 2*wC0 + 2*wC1 + 4*wC2;
4423                                  EM_S[INDEX2(0,5,8)]+=C_0*w48 + C_1*w51/4 - C_2*w52;                                  EM_S[INDEX2(0,5,8)]+=-2*wC0 +   wC1 + 2*wC2;
4424                                  EM_S[INDEX2(0,6,8)]+=C_0*w53 + C_1*w49 - C_2*w52;                                  EM_S[INDEX2(0,6,8)]+=   wC0 - 2*wC1 + 2*wC2;
4425                                  EM_S[INDEX2(0,7,8)]+=-C_0*w53 - C_1*w51/4 + C_2*w50/4;                                  EM_S[INDEX2(0,7,8)]+=  -wC0 -   wC1 +   wC2;
4426                                  EM_S[INDEX2(1,0,8)]+=4*C_0*w53 - C_1*w49 + C_2*w52;                                  EM_S[INDEX2(1,0,8)]+= 4*wC0 + 2*wC1 - 2*wC2;
4427                                  EM_S[INDEX2(1,1,8)]+=-4*C_0*w53 + C_1*w51 - C_2*w50;                                  EM_S[INDEX2(1,1,8)]+=-4*wC0 + 4*wC1 - 4*wC2;
4428                                  EM_S[INDEX2(1,2,8)]+=-C_0*w48 + C_1*w49 + C_2*w52/2;                                  EM_S[INDEX2(1,2,8)]+= 2*wC0 - 2*wC1 -   wC2;
4429                                  EM_S[INDEX2(1,3,8)]+=C_0*w48 - C_1*w51 + C_2*w52;                                  EM_S[INDEX2(1,3,8)]+=-2*wC0 - 4*wC1 - 2*wC2;
4430                                  EM_S[INDEX2(1,4,8)]+=-C_0*w48 + C_1*w51/4 - C_2*w52;                                  EM_S[INDEX2(1,4,8)]+= 2*wC0 +   wC1 + 2*wC2;
4431                                  EM_S[INDEX2(1,5,8)]+=C_0*w48 - C_1*w49 + C_2*w50;                                  EM_S[INDEX2(1,5,8)]+=-2*wC0 + 2*wC1 + 4*wC2;
4432                                  EM_S[INDEX2(1,6,8)]+=C_0*w53 - C_1*w51/4 + C_2*w50/4;                                  EM_S[INDEX2(1,6,8)]+=   wC0 -   wC1 +   wC2;
4433                                  EM_S[INDEX2(1,7,8)]+=-C_0*w53 + C_1*w49 - C_2*w52;                                  EM_S[INDEX2(1,7,8)]+=  -wC0 - 2*wC1 + 2*wC2;
4434                                  EM_S[INDEX2(2,0,8)]+=-C_0*w48 + C_1*w51 + C_2*w52;                                  EM_S[INDEX2(2,0,8)]+= 2*wC0 + 4*wC1 - 2*wC2;
4435                                  EM_S[INDEX2(2,1,8)]+=C_0*w48 - C_1*w49 + C_2*w52/2;                                  EM_S[INDEX2(2,1,8)]+=-2*wC0 + 2*wC1 -   wC2;
4436                                  EM_S[INDEX2(2,2,8)]+=4*C_0*w53 - C_1*w51 - C_2*w50;                                  EM_S[INDEX2(2,2,8)]+= 4*wC0 - 4*wC1 - 4*wC2;
4437                                  EM_S[INDEX2(2,3,8)]+=-4*C_0*w53 + C_1*w49 + C_2*w52;                                  EM_S[INDEX2(2,3,8)]+=-4*wC0 - 2*wC1 - 2*wC2;
4438                                  EM_S[INDEX2(2,4,8)]+=C_0*w53 - C_1*w49 - C_2*w52;                                  EM_S[INDEX2(2,4,8)]+=   wC0 + 2*wC1 + 2*wC2;
4439                                  EM_S[INDEX2(2,5,8)]+=-C_0*w53 + C_1*w51/4 + C_2*w50/4;                                  EM_S[INDEX2(2,5,8)]+=  -wC0 +   wC1 +   wC2;
4440                                  EM_S[INDEX2(2,6,8)]+=-C_0*w48 + C_1*w49 + C_2*w50;                                  EM_S[INDEX2(2,6,8)]+= 2*wC0 - 2*wC1 + 4*wC2;
4441                                  EM_S[INDEX2(2,7,8)]+=C_0*w48 - C_1*w51/4 - C_2*w52;                                  EM_S[INDEX2(2,7,8)]+=-2*wC0 -   wC1 + 2*wC2;
4442                                  EM_S[INDEX2(3,0,8)]+=-C_0*w48 - C_1*w49 + C_2*w52/2;                                  EM_S[INDEX2(3,0,8)]+= 2*wC0 + 2*wC1 -   wC2;
4443                                  EM_S[INDEX2(3,1,8)]+=C_0*w48 + C_1*w51 + C_2*w52;                                  EM_S[INDEX2(3,1,8)]+=-2*wC0 + 4*wC1 - 2*wC2;
4444                                  EM_S[INDEX2(3,2,8)]+=4*C_0*w53 + C_1*w49 + C_2*w52;                                  EM_S[INDEX2(3,2,8)]+= 4*wC0 - 2*wC1 - 2*wC2;
4445                                  EM_S[INDEX2(3,3,8)]+=-4*C_0*w53 - C_1*w51 - C_2*w50;                                  EM_S[INDEX2(3,3,8)]+=-4*wC0 - 4*wC1 - 4*wC2;
4446                                  EM_S[INDEX2(3,4,8)]+=C_0*w53 + C_1*w51/4 + C_2*w50/4;                                  EM_S[INDEX2(3,4,8)]+=   wC0 +   wC1 +   wC2;
4447                                  EM_S[INDEX2(3,5,8)]+=-C_0*w53 - C_1*w49 - C_2*w52;                                  EM_S[INDEX2(3,5,8)]+=  -wC0 + 2*wC1 + 2*wC2;
4448                                  EM_S[INDEX2(3,6,8)]+=-C_0*w48 - C_1*w51/4 - C_2*w52;                                  EM_S[INDEX2(3,6,8)]+= 2*wC0 -   wC1 + 2*wC2;
4449                                  EM_S[INDEX2(3,7,8)]+=C_0*w48 + C_1*w49 + C_2*w50;                                  EM_S[INDEX2(3,7,8)]+=-2*wC0 - 2*wC1 + 4*wC2;
4450                                  EM_S[INDEX2(4,0,8)]+=-C_0*w48 - C_1*w49 - C_2*w50;                                  EM_S[INDEX2(4,0,8)]+= 2*wC0 + 2*wC1 - 4*wC2;
4451                                  EM_S[INDEX2(4,1,8)]+=C_0*w48 + C_1*w51/4 + C_2*w52;                                  EM_S[INDEX2(4,1,8)]+=-2*wC0 +   wC1 - 2*wC2;
4452                                  EM_S[INDEX2(4,2,8)]+=C_0*w53 + C_1*w49 + C_2*w52;                                  EM_S[INDEX2(4,2,8)]+=   wC0 - 2*wC1 - 2*wC2;
4453                                  EM_S[INDEX2(4,3,8)]+=-C_0*w53 - C_1*w51/4 + C_2*w52/2;                                  EM_S[INDEX2(4,3,8)]+=  -wC0 -   wC1 -   wC2;
4454                                  EM_S[INDEX2(4,4,8)]+=4*C_0*w53 + C_1*w51 + C_2*w50;                                  EM_S[INDEX2(4,4,8)]+= 4*wC0 + 4*wC1 + 4*wC2;
4455                                  EM_S[INDEX2(4,5,8)]+=-4*C_0*w53 - C_1*w49 - C_2*w52;                                  EM_S[INDEX2(4,5,8)]+=-4*wC0 + 2*wC1 + 2*wC2;
4456                                  EM_S[INDEX2(4,6,8)]+=-C_0*w48 - C_1*w51 - C_2*w52;                                  EM_S[INDEX2(4,6,8)]+= 2*wC0 - 4*wC1 + 2*wC2;
4457                                  EM_S[INDEX2(4,7,8)]+=C_0*w48 + C_1*w49 + C_2*w50/4;                                  EM_S[INDEX2(4,7,8)]+=-2*wC0 - 2*wC1 +   wC2;
4458                                  EM_S[INDEX2(5,0,8)]+=-C_0*w48 + C_1*w51/4 + C_2*w52;                                  EM_S[INDEX2(5,0,8)]+= 2*wC0 +   wC1 - 2*wC2;
4459                                  EM_S[INDEX2(5,1,8)]+=C_0*w48 - C_1*w49 - C_2*w50;                                  EM_S[INDEX2(5,1,8)]+=-2*wC0 + 2*wC1 - 4*wC2;
4460                                  EM_S[INDEX2(5,2,8)]+=C_0*w53 - C_1*w51/4 + C_2*w52/2;                                  EM_S[INDEX2(5,2,8)]+=   wC0 -   wC1 -   wC2;
4461                                  EM_S[INDEX2(5,3,8)]+=-C_0*w53 + C_1*w49 + C_2*w52;                                  EM_S[INDEX2(5,3,8)]+=  -wC0 - 2*wC1 - 2*wC2;
4462                                  EM_S[INDEX2(5,4,8)]+=4*C_0*w53 - C_1*w49 - C_2*w52;                                  EM_S[INDEX2(5,4,8)]+= 4*wC0 + 2*wC1 + 2*wC2;
4463                                  EM_S[INDEX2(5,5,8)]+=-4*C_0*w53 + C_1*w51 + C_2*w50;                                  EM_S[INDEX2(5,5,8)]+=-4*wC0 + 4*wC1 + 4*wC2;
4464                                  EM_S[INDEX2(5,6,8)]+=-C_0*w48 + C_1*w49 + C_2*w50/4;                                  EM_S[INDEX2(5,6,8)]+= 2*wC0 - 2*wC1 +   wC2;
4465                                  EM_S[INDEX2(5,7,8)]+=C_0*w48 - C_1*w51 - C_2*w52;                                  EM_S[INDEX2(5,7,8)]+=-2*wC0 - 4*wC1 + 2*wC2;
4466                                  EM_S[INDEX2(6,0,8)]+=C_0*w53 - C_1*w49 + C_2*w52;                                  EM_S[INDEX2(6,0,8)]+=   wC0 + 2*wC1 - 2*wC2;
4467                                  EM_S[INDEX2(6,1,8)]+=-C_0*w53 + C_1*w51/4 + C_2*w52/2;                                  EM_S[INDEX2(6,1,8)]+=  -wC0 +   wC1 -   wC2;
4468                                  EM_S[INDEX2(6,2,8)]+=-C_0*w48 + C_1*w49 - C_2*w50;                                  EM_S[INDEX2(6,2,8)]+= 2*wC0 - 2*wC1 - 4*wC2;
4469                                  EM_S[INDEX2(6,3,8)]+=C_0*w48 - C_1*w51/4 + C_2*w52;                                  EM_S[INDEX2(6,3,8)]+=-2*wC0 -   wC1 - 2*wC2;
4470                                  EM_S[INDEX2(6,4,8)]+=-C_0*w48 + C_1*w51 - C_2*w52;                                  EM_S[INDEX2(6,4,8)]+= 2*wC0 + 4*wC1 + 2*wC2;
4471                                  EM_S[INDEX2(6,5,8)]+=C_0*w48 - C_1*w49 + C_2*w50/4;                                  EM_S[INDEX2(6,5,8)]+=-2*wC0 + 2*wC1 +   wC2;
4472                                  EM_S[INDEX2(6,6,8)]+=4*C_0*w53 - C_1*w51 + C_2*w50;                                  EM_S[INDEX2(6,6,8)]+= 4*wC0 - 4*wC1 + 4*wC2;
4473                                  EM_S[INDEX2(6,7,8)]+=-4*C_0*w53 + C_1*w49 - C_2*w52;                                  EM_S[INDEX2(6,7,8)]+=-4*wC0 - 2*wC1 + 2*wC2;
4474                                  EM_S[INDEX2(7,0,8)]+=C_0*w53 + C_1*w51/4 + C_2*w52/2;                                  EM_S[INDEX2(7,0,8)]+=   wC0 +   wC1 -   wC2;
4475                                  EM_S[INDEX2(7,1,8)]+=-C_0*w53 - C_1*w49 + C_2*w52;                                  EM_S[INDEX2(7,1,8)]+=  -wC0 + 2*wC1 - 2*wC2;
4476                                  EM_S[INDEX2(7,2,8)]+=-C_0*w48 - C_1*w51/4 + C_2*w52;                                  EM_S[INDEX2(7,2,8)]+= 2*wC0 -   wC1 - 2*wC2;
4477                                  EM_S[INDEX2(7,3,8)]+=C_0*w48 + C_1*w49 - C_2*w50;                                  EM_S[INDEX2(7,3,8)]+=-2*wC0 - 2*wC1 - 4*wC2;
4478                                  EM_S[INDEX2(7,4,8)]+=-C_0*w48 - C_1*w49 + C_2*w50/4;                                  EM_S[INDEX2(7,4,8)]+= 2*wC0 + 2*wC1 +   wC2;
4479                                  EM_S[INDEX2(7,5,8)]+=C_0*w48 + C_1*w51 - C_2*w52;                                  EM_S[INDEX2(7,5,8)]+=-2*wC0 + 4*wC1 + 2*wC2;
4480                                  EM_S[INDEX2(7,6,8)]+=4*C_0*w53 + C_1*w49 - C_2*w52;                                  EM_S[INDEX2(7,6,8)]+= 4*wC0 - 2*wC1 + 2*wC2;
4481                                  EM_S[INDEX2(7,7,8)]+=-4*C_0*w53 - C_1*w51 + C_2*w50;                                  EM_S[INDEX2(7,7,8)]+=-4*wC0 - 4*wC1 + 4*wC2;
4482                              }                              }
4483                          }                          }
4484                          ///////////////                          ///////////////
# Line 4643  void Brick::assemblePDESingle(Paso_Syste Line 4620  void Brick::assemblePDESingle(Paso_Syste
4620                                  EM_S[INDEX2(7,6,8)]+=tmp25 + tmp26 + tmp27;                                  EM_S[INDEX2(7,6,8)]+=tmp25 + tmp26 + tmp27;
4621                                  EM_S[INDEX2(7,7,8)]+=D_0*w60 + D_7*w59 + tmp37 + tmp38;                                  EM_S[INDEX2(7,7,8)]+=D_0*w60 + D_7*w59 + tmp37 + tmp38;
4622                              } else { // constant data                              } else { // constant data
4623                                  const double D_0 = D_p[0];                                  const double wD0 = 8*D_p[0]*w55;
4624                                  EM_S[INDEX2(0,0,8)]+=64*D_0*w55;                                  EM_S[INDEX2(0,0,8)]+=8*wD0;
4625                                  EM_S[INDEX2(0,1,8)]+=32*D_0*w55;                                  EM_S[INDEX2(0,1,8)]+=4*wD0;
4626                                  EM_S[INDEX2(0,2,8)]+=32*D_0*w55;                                  EM_S[INDEX2(0,2,8)]+=4*wD0;
4627                                  EM_S[INDEX2(0,3,8)]+=16*D_0*w55;                                  EM_S[INDEX2(0,3,8)]+=2*wD0;
4628                                  EM_S[INDEX2(0,4,8)]+=32*D_0*w55;                                  EM_S[INDEX2(0,4,8)]+=4*wD0;
4629                                  EM_S[INDEX2(0,5,8)]+=16*D_0*w55;                                  EM_S[INDEX2(0,5,8)]+=2*wD0;
4630                                  EM_S[INDEX2(0,6,8)]+=16*D_0*w55;                                  EM_S[INDEX2(0,6,8)]+=2*wD0;
4631                                  EM_S[INDEX2(0,7,8)]+=8*D_0*w55;                                  EM_S[INDEX2(0,7,8)]+=wD0;
4632                                  EM_S[INDEX2(1,0,8)]+=32*D_0*w55;                                  EM_S[INDEX2(1,0,8)]+=4*wD0;
4633                                  EM_S[INDEX2(1,1,8)]+=64*D_0*w55;                                  EM_S[INDEX2(1,1,8)]+=8*wD0;
4634                                  EM_S[INDEX2(1,2,8)]+=16*D_0*w55;                                  EM_S[INDEX2(1,2,8)]+=2*wD0;
4635                                  EM_S[INDEX2(1,3,8)]+=32*D_0*w55;                                  EM_S[INDEX2(1,3,8)]+=4*wD0;
4636                                  EM_S[INDEX2(1,4,8)]+=16*D_0*w55;                                  EM_S[INDEX2(1,4,8)]+=2*wD0;
4637                                  EM_S[INDEX2(1,5,8)]+=32*D_0*w55;                                  EM_S[INDEX2(1,5,8)]+=4*wD0;
4638                                  EM_S[INDEX2(1,6,8)]+=8*D_0*w55;                                  EM_S[INDEX2(1,6,8)]+=wD0;
4639                                  EM_S[INDEX2(1,7,8)]+=16*D_0*w55;                                  EM_S[INDEX2(1,7,8)]+=2*wD0;
4640                                  EM_S[INDEX2(2,0,8)]+=32*D_0*w55;                                  EM_S[INDEX2(2,0,8)]+=4*wD0;
4641                                  EM_S[INDEX2(2,1,8)]+=16*D_0*w55;                                  EM_S[INDEX2(2,1,8)]+=2*wD0;
4642                                  EM_S[INDEX2(2,2,8)]+=64*D_0*w55;                                  EM_S[INDEX2(2,2,8)]+=8*wD0;
4643                                  EM_S[INDEX2(2,3,8)]+=32*D_0*w55;                                  EM_S[INDEX2(2,3,8)]+=4*wD0;
4644                                  EM_S[INDEX2(2,4,8)]+=16*D_0*w55;                                  EM_S[INDEX2(2,4,8)]+=2*wD0;
4645                                  EM_S[INDEX2(2,5,8)]+=8*D_0*w55;                                  EM_S[INDEX2(2,5,8)]+=wD0;
4646                                  EM_S[INDEX2(2,6,8)]+=32*D_0*w55;                                  EM_S[INDEX2(2,6,8)]+=4*wD0;
4647                                  EM_S[INDEX2(2,7,8)]+=16*D_0*w55;                                  EM_S[INDEX2(2,7,8)]+=2*wD0;
4648                                  EM_S[INDEX2(3,0,8)]+=16*D_0*w55;                                  EM_S[INDEX2(3,0,8)]+=2*wD0;
4649                                  EM_S[INDEX2(3,1,8)]+=32*D_0*w55;                                  EM_S[INDEX2(3,1,8)]+=4*wD0;
4650                                  EM_S[INDEX2(3,2,8)]+=32*D_0*w55;                                  EM_S[INDEX2(3,2,8)]+=4*wD0;
4651                                  EM_S[INDEX2(3,3,8)]+=64*D_0*w55;                                  EM_S[INDEX2(3,3,8)]+=8*wD0;
4652                                  EM_S[INDEX2(3,4,8)]+=8*D_0*w55;                                  EM_S[INDEX2(3,4,8)]+=wD0;
4653                                  EM_S[INDEX2(3,5,8)]+=16*D_0*w55;                                  EM_S[INDEX2(3,5,8)]+=2*wD0;
4654                                  EM_S[INDEX2(3,6,8)]+=16*D_0*w55;                                  EM_S[INDEX2(3,6,8)]+=2*wD0;
4655                                  EM_S[INDEX2(3,7,8)]+=32*D_0*w55;                                  EM_S[INDEX2(3,7,8)]+=4*wD0;
4656                                  EM_S[INDEX2(4,0,8)]+=32*D_0*w55;                                  EM_S[INDEX2(4,0,8)]+=4*wD0;
4657                                  EM_S[INDEX2(4,1,8)]+=16*D_0*w55;                                  EM_S[INDEX2(4,1,8)]+=2*wD0;
4658                                  EM_S[INDEX2(4,2,8)]+=16*D_0*w55;                                  EM_S[INDEX2(4,2,8)]+=2*wD0;
4659                                  EM_S[INDEX2(4,3,8)]+=8*D_0*w55;                                  EM_S[INDEX2(4,3,8)]+=wD0;
4660                                  EM_S[INDEX2(4,4,8)]+=64*D_0*w55;                                  EM_S[INDEX2(4,4,8)]+=8*wD0;
4661                                  EM_S[INDEX2(4,5,8)]+=32*D_0*w55;                                  EM_S[INDEX2(4,5,8)]+=4*wD0;
4662                                  EM_S[INDEX2(4,6,8)]+=32*D_0*w55;                                  EM_S[INDEX2(4,6,8)]+=4*wD0;
4663                                  EM_S[INDEX2(4,7,8)]+=16*D_0*w55;                                  EM_S[INDEX2(4,7,8)]+=2*wD0;
4664                                  EM_S[INDEX2(5,0,8)]+=16*D_0*w55;                                  EM_S[INDEX2(5,0,8)]+=2*wD0;
4665                                  EM_S[INDEX2(5,1,8)]+=32*D_0*w55;                                  EM_S[INDEX2(5,1,8)]+=4*wD0;
4666                                  EM_S[INDEX2(5,2,8)]+=8*D_0*w55;                                  EM_S[INDEX2(5,2,8)]+=wD0;
4667                                  EM_S[INDEX2(5,3,8)]+=16*D_0*w55;                                  EM_S[INDEX2(5,3,8)]+=2*wD0;
4668                                  EM_S[INDEX2(5,4,8)]+=32*D_0*w55;                                  EM_S[INDEX2(5,4,8)]+=4*wD0;
4669                                  EM_S[INDEX2(5,5,8)]+=64*D_0*w55;                                  EM_S[INDEX2(5,5,8)]+=8*wD0;
4670                                  EM_S[INDEX2(5,6,8)]+=16*D_0*w55;                                  EM_S[INDEX2(5,6,8)]+=2*wD0;
4671                                  EM_S[INDEX2(5,7,8)]+=32*D_0*w55;                                  EM_S[INDEX2(5,7,8)]+=4*wD0;
4672                                  EM_S[INDEX2(6,0,8)]+=16*D_0*w55;                                  EM_S[INDEX2(6,0,8)]+=2*wD0;
4673                                  EM_S[INDEX2(6,1,8)]+=8*D_0*w55;                                  EM_S[INDEX2(6,1,8)]+=wD0;
4674                                  EM_S[INDEX2(6,2,8)]+=32*D_0*w55;                                  EM_S[INDEX2(6,2,8)]+=4*wD0;
4675                                  EM_S[INDEX2(6,3,8)]+=16*D_0*w55;                                  EM_S[INDEX2(6,3,8)]+=2*wD0;
4676                                  EM_S[INDEX2(6,4,8)]+=32*D_0*w55;                                  EM_S[INDEX2(6,4,8)]+=4*wD0;
4677                                  EM_S[INDEX2(6,5,8)]+=16*D_0*w55;                                  EM_S[INDEX2(6,5,8)]+=2*wD0;
4678                                  EM_S[INDEX2(6,6,8)]+=64*D_0*w55;                                  EM_S[INDEX2(6,6,8)]+=8*wD0;
4679                                  EM_S[INDEX2(6,7,8)]+=32*D_0*w55;                                  EM_S[INDEX2(6,7,8)]+=4*wD0;
4680                                  EM_S[INDEX2(7,0,8)]+=8*D_0*w55;                                  EM_S[INDEX2(7,0,8)]+=wD0;
4681                                  EM_S[INDEX2(7,1,8)]+=16*D_0*w55;                                  EM_S[INDEX2(7,1,8)]+=2*wD0;
4682                                  EM_S[INDEX2(7,2,8)]+=16*D_0*w55;                                  EM_S[INDEX2(7,2,8)]+=2*wD0;
4683                                  EM_S[INDEX2(7,3,8)]+=32*D_0*w55;                                  EM_S[INDEX2(7,3,8)]+=4*wD0;
4684                                  EM_S[INDEX2(7,4,8)]+=16*D_0*w55;                                  EM_S[INDEX2(7,4,8)]+=2*wD0;
4685                                  EM_S[INDEX2(7,5,8)]+=32*D_0*w55;                                  EM_S[INDEX2(7,5,8)]+=4*wD0;
4686                                  EM_S[INDEX2(7,6,8)]+=32*D_0*w55;                                  EM_S[INDEX2(7,6,8)]+=4*wD0;
4687                                  EM_S[INDEX2(7,7,8)]+=64*D_0*w55;                                  EM_S[INDEX2(7,7,8)]+=8*wD0;
4688                              }                              }
4689                          }                          }
4690                          ///////////////                          ///////////////
# Line 4810  void Brick::assemblePDESingle(Paso_Syste Line 4787  void Brick::assemblePDESingle(Paso_Syste
4787                                  EM_F[6]+=tmp0 + tmp27 + tmp43 + tmp48 + tmp49 + tmp50 + tmp51 + tmp52 + tmp53;                                  EM_F[6]+=tmp0 + tmp27 + tmp43 + tmp48 + tmp49 + tmp50 + tmp51 + tmp52 + tmp53;
4788                                  EM_F[7]+=tmp19 + tmp36 + tmp54 + tmp55 + tmp56 + tmp57 + tmp58 + tmp59 + tmp9;                                  EM_F[7]+=tmp19 + tmp36 + tmp54 + tmp55 + tmp56 + tmp57 + tmp58 + tmp59 + tmp9;
4789                              } else { // constant data                              } else { // constant data
4790                                  const double X_0 = X_p[0];                                  const double wX0 = 12*X_p[0]*w66;
4791                                  const double X_1 = X_p[1];                                  const double wX1 = 12*X_p[1]*w64;
4792                                  const double X_2 = X_p[2];                                  const double wX2 = 18*X_p[2]*w50;
4793                                  EM_F[0]+=18*X_0*w53 + 12*X_1*w64 + 12*X_2*w65;                                  EM_F[0]+= wX0 + wX1 - wX2;
4794                                  EM_F[1]+=-18*X_0*w53 + 12*X_1*w64 + 12*X_2*w65;                                  EM_F[1]+=-wX0 + wX1 - wX2;
4795                                  EM_F[2]+=18*X_0*w53 - 12*X_1*w64 + 12*X_2*w65;                                  EM_F[2]+= wX0 - wX1 - wX2;
4796                                  EM_F[3]+=-18*X_0*w53 - 12*X_1*w64 + 12*X_2*w65;                                  EM_F[3]+=-wX0 - wX1 - wX2;
4797                                  EM_F[4]+=18*X_0*w53 + 12*X_1*w64 - 12*X_2*w65;                                  EM_F[4]+= wX0 + wX1 + wX2;
4798                                  EM_F[5]+=-18*X_0*w53 + 12*X_1*w64 - 12*X_2*w65;                                  EM_F[5]+=-wX0 + wX1 + wX2;
4799                                  EM_F[6]+=18*X_0*w53 - 12*X_1*w64 - 12*X_2*w65;                                  EM_F[6]+= wX0 - wX1 + wX2;
4800                                  EM_F[7]+=-18*X_0*w53 - 12*X_1*w64 - 12*X_2*w65;                                  EM_F[7]+=-wX0 - wX1 + wX2;
4801                              }                              }
4802                          }                          }
4803                          ///////////////                          ///////////////
# Line 4863  void Brick::assemblePDESingle(Paso_Syste Line 4840  void Brick::assemblePDESingle(Paso_Syste
4840                                  EM_F[6]+=Y_1*w73 + Y_6*w70 + tmp12 + tmp13;                                  EM_F[6]+=Y_1*w73 + Y_6*w70 + tmp12 + tmp13;
4841                                  EM_F[7]+=Y_0*w73 + Y_7*w70 + tmp14 + tmp15;                                  EM_F[7]+=Y_0*w73 + Y_7*w70 + tmp14 + tmp15;
4842                              } else { // constant data                              } else { // constant data
4843                                  const double Y_0 = Y_p[0];                                  EM_F[0]+=216*Y_p[0]*w55;
4844                                  EM_F[0]+=216*Y_0*w55;                                  EM_F[1]+=216*Y_p[0]*w55;
4845                                  EM_F[1]+=216*Y_0*w55;                                  EM_F[2]+=216*Y_p[0]*w55;
4846                                  EM_F[2]+=216*Y_0*w55;                                  EM_F[3]+=216*Y_p[0]*w55;
4847                                  EM_F[3]+=216*Y_0*w55;                                  EM_F[4]+=216*Y_p[0]*w55;
4848                                  EM_F[4]+=216*Y_0*w55;                                  EM_F[5]+=216*Y_p[0]*w55;
4849                                  EM_F[5]+=216*Y_0*w55;                                  EM_F[6]+=216*Y_p[0]*w55;
4850                                  EM_F[6]+=216*Y_0*w55;                                  EM_F[7]+=216*Y_p[0]*w55;
                                 EM_F[7]+=216*Y_0*w55;  
4851                              }                              }
4852                          }                          }
                         /* GENERATOR SNIP_PDE_SINGLE BOTTOM */  
4853    
4854                          // add to matrix (if add_EM_S) and RHS (if add_EM_F)                          // add to matrix (if add_EM_S) and RHS (if add_EM_F)
4855                          const index_t firstNode=m_NN[0]*m_NN[1]*k2+m_NN[0]*k1+k0;                          const index_t firstNode=m_NN[0]*m_NN[1]*k2+m_NN[0]*k1+k0;
# Line 4893  void Brick::assemblePDESingleReduced(Pas Line 4868  void Brick::assemblePDESingleReduced(Pas
4868          const escript::Data& C, const escript::Data& D,          const escript::Data& C, const escript::Data& D,
4869          const escript::Data& X, const escript::Data& Y) const          const escript::Data& X, const escript::Data& Y) const
4870  {  {
4871      const double h0 = m_dx[0];      const double w6 = m_dx[0]/16;
4872      const double h1 = m_dx[1];      const double w5 = m_dx[1]/16;
4873      const double h2 = m_dx[2];      const double w1 = m_dx[2]/16;
4874      const double w0 = 0.0625*h1*h2/h0;      const double w14 = m_dx[0]*m_dx[1]/32;
4875      const double w1 = 0.0625*h2;      const double w13 = m_dx[0]*m_dx[2]/32;
4876      const double w2 = -0.0625*h1;      const double w12 = m_dx[1]*m_dx[2]/32;
4877      const double w3 = 0.0625*h0*h2/h1;      const double w18 = m_dx[0]*m_dx[1]*m_dx[2]/64;
4878      const double w4 = -0.0625*h0;      const double w11 = m_dx[0]*m_dx[1]/(16*m_dx[2]);
4879      const double w5 = 0.0625*h1;      const double w3 = m_dx[0]*m_dx[2]/(16*m_dx[1]);
4880      const double w6 = 0.0625*h0;      const double w0 = m_dx[1]*m_dx[2]/(16*m_dx[0]);
     const double w7 = -0.0625*h0*h1/h2;  
     const double w8 = -0.0625*h1*h2/h0;  
     const double w9 = -0.0625*h2;  
     const double w10 = -0.0625*h0*h2/h1;  
     const double w11 = 0.0625*h0*h1/h2;  
     const double w12 = 0.03125*h1*h2;  
     const double w13 = 0.03125*h0*h2;  
     const double w14 = 0.03125*h0*h1;  
     const double w15 = -0.03125*h1*h2;  
     const double w16 = -0.03125*h0*h2;  
     const double w17 = -0.03125*h0*h1;  
     const double w18 = 0.015625*h0*h1*h2;  
     const double w19 = -0.25*h1*h2;  
     const double w20 = -0.25*h0*h2;  
     const double w21 = -0.25*h0*h1;  
     const double w22 = 0.25*h1*h2;  
     const double w23 = 0.25*h0*h2;  
     const double w24 = 0.25*h0*h1;  
     const double w25 = 0.125*h0*h1*h2;  
4881    
4882      rhs.requireWrite();      rhs.requireWrite();
4883  #pragma omp parallel  #pragma omp parallel
# Line 4942  void Brick::assemblePDESingleReduced(Pas Line 4898  void Brick::assemblePDESingleReduced(Pas
4898                          if (!A.isEmpty()) {                          if (!A.isEmpty()) {
4899                              add_EM_S=true;                              add_EM_S=true;
4900                              const double* A_p=const_cast<escript::Data*>(&A)->getSampleDataRO(e);                              const double* A_p=const_cast<escript::Data*>(&A)->getSampleDataRO(e);
4901                              const double A_00 = A_p[INDEX2(0,0,3)];                              const double Aw00 = A_p[INDEX2(0,0,3)]*w0;
4902                              const double A_10 = A_p[INDEX2(1,0,3)];                              const double Aw10 = A_p[INDEX2(1,0,3)]*w1;
4903                              const double A_20 = A_p[INDEX2(2,0,3)];                              const double Aw20 = A_p[INDEX2(2,0,3)]*w5;
4904                              const double A_01 = A_p[INDEX2(0,1,3)];                              const double Aw01 = A_p[INDEX2(0,1,3)]*w1;
4905                              const double A_11 = A_p[INDEX2(1,1,3)];                              const double Aw11 = A_p[INDEX2(1,1,3)]*w3;
4906                              const double A_21 = A_p[INDEX2(2,1,3)];                              const double Aw21 = A_p[INDEX2(2,1,3)]*w6;
4907                              const double A_02 = A_p[INDEX2(0,2,3)];                              const double Aw02 = A_p[INDEX2(0,2,3)]*w5;
4908                              const double A_12 = A_p[INDEX2(1,2,3)];                              const double Aw12 = A_p[INDEX2(1,2,3)]*w6;
4909                              const double A_22 = A_p[INDEX2(2,2,3)];                              const double Aw22 = A_p[INDEX2(2,2,3)]*w11;
4910                              const double tmp0_0 = A_01 + A_10;                              EM_S[INDEX2(0,0,8)]+= Aw00 + Aw01 + Aw02 + Aw10 + Aw11 + Aw12 + Aw20 + Aw21 + Aw22;
4911                              const double tmp1_0 = A_02 + A_20;                              EM_S[INDEX2(1,0,8)]+=-Aw00 - Aw01 - Aw02 + Aw10 + Aw11 + Aw12 + Aw20 + Aw21 + Aw22;
4912                              const double tmp2_0 = A_12 + A_21;                              EM_S[INDEX2(2,0,8)]+= Aw00 + Aw01 + Aw02 - Aw10 - Aw11 - Aw12 + Aw20 + Aw21 + Aw22;
4913                              const double tmp3_1 = A_22*w7;                              EM_S[INDEX2(3,0,8)]+=-Aw00 - Aw01 - Aw02 - Aw10 - Aw11 - Aw12 + Aw20 + Aw21 + Aw22;
4914                              const double tmp10_1 = A_11*w10;                              EM_S[INDEX2(4,0,8)]+= Aw00 + Aw01 + Aw02 + Aw10 + Aw11 + Aw12 - Aw20 - Aw21 - Aw22;
4915                              const double tmp21_1 = A_02*w5;                              EM_S[INDEX2(5,0,8)]+=-Aw00 - Aw01 - Aw02 + Aw10 + Aw11 + Aw12 - Aw20 - Aw21 - Aw22;
4916                              const double tmp2_1 = A_00*w0;                              EM_S[INDEX2(6,0,8)]+= Aw00 + Aw01 + Aw02 - Aw10 - Aw11 - Aw12 - Aw20 - Aw21 - Aw22;
4917                              const double tmp23_1 = tmp2_0*w6;                              EM_S[INDEX2(7,0,8)]+=-Aw00 - Aw01 - Aw02 - Aw10 - Aw11 - Aw12 - Aw20 - Aw21 - Aw22;
4918                              const double tmp19_1 = A_20*w2;                              EM_S[INDEX2(0,1,8)]+=-Aw00 + Aw01 + Aw02 - Aw10 + Aw11 + Aw12 - Aw20 + Aw21 + Aw22;
4919                              const double tmp4_1 = A_11*w3;                              EM_S[INDEX2(1,1,8)]+= Aw00 - Aw01 - Aw02 - Aw10 + Aw11 + Aw12 - Aw20 + Aw21 + Aw22;
4920                              const double tmp22_1 = tmp1_0*w5;                              EM_S[INDEX2(2,1,8)]+=-Aw00 + Aw01 + Aw02 + Aw10 - Aw11 - Aw12 - Aw20 + Aw21 + Aw22;
4921                              const double tmp13_1 = A_21*w4;                              EM_S[INDEX2(3,1,8)]+= Aw00 - Aw01 - Aw02 + Aw10 - Aw11 - Aw12 - Aw20 + Aw21 + Aw22;
4922                              const double tmp5_1 = A_21*w6;                              EM_S[INDEX2(4,1,8)]+=-Aw00 + Aw01 + Aw02 - Aw10 + Aw11 + Aw12 + Aw20 - Aw21 - Aw22;
4923                              const double tmp8_1 = A_00*w8;                              EM_S[INDEX2(5,1,8)]+= Aw00 - Aw01 - Aw02 - Aw10 + Aw11 + Aw12 + Aw20 - Aw21 - Aw22;
4924                              const double tmp7_1 = A_20*w5;                              EM_S[INDEX2(6,1,8)]+=-Aw00 + Aw01 + Aw02 + Aw10 - Aw11 - Aw12 + Aw20 - Aw21 - Aw22;
4925                              const double tmp18_1 = tmp2_0*w4;                              EM_S[INDEX2(7,1,8)]+= Aw00 - Aw01 - Aw02 + Aw10 - Aw11 - Aw12 + Aw20 - Aw21 - Aw22;
4926                              const double tmp6_1 = A_02*w2;                              EM_S[INDEX2(0,2,8)]+= Aw00 - Aw01 + Aw02 + Aw10 - Aw11 + Aw12 + Aw20 - Aw21 + Aw22;
4927                              const double tmp9_1 = A_22*w11;                              EM_S[INDEX2(1,2,8)]+=-Aw00 + Aw01 - Aw02 + Aw10 - Aw11 + Aw12 + Aw20 - Aw21 + Aw22;
4928                              const double tmp15_1 = tmp1_0*w2;                              EM_S[INDEX2(2,2,8)]+= Aw00 - Aw01 + Aw02 - Aw10 + Aw11 - Aw12 + Aw20 - Aw21 + Aw22;
4929                              const double tmp12_1 = A_01*w1;                              EM_S[INDEX2(3,2,8)]+=-Aw00 + Aw01 - Aw02 - Aw10 + Aw11 - Aw12 + Aw20 - Aw21 + Aw22;
4930                              const double tmp0_1 = tmp0_0*w1;                              EM_S[INDEX2(4,2,8)]+= Aw00 - Aw01 + Aw02 + Aw10 - Aw11 + Aw12 - Aw20 + Aw21 - Aw22;
4931                              const double tmp20_1 = A_01*w9;                              EM_S[INDEX2(5,2,8)]+=-Aw00 + Aw01 - Aw02 + Aw10 - Aw11 + Aw12 - Aw20 + Aw21 - Aw22;
4932                              const double tmp14_1 = A_12*w6;                              EM_S[INDEX2(6,2,8)]+= Aw00 - Aw01 + Aw02 - Aw10 + Aw11 - Aw12 - Aw20 + Aw21 - Aw22;
4933                              const double tmp1_1 = A_12*w4;                              EM_S[INDEX2(7,2,8)]+=-Aw00 + Aw01 - Aw02 - Aw10 + Aw11 - Aw12 - Aw20 + Aw21 - Aw22;
4934                              const double tmp16_1 = A_10*w9;                              EM_S[INDEX2(0,3,8)]+=-Aw00 - Aw01 + Aw02 - Aw10 - Aw11 + Aw12 - Aw20 - Aw21 + Aw22;
4935                              const double tmp11_1 = tmp0_0*w9;                              EM_S[INDEX2(1,3,8)]+= Aw00 + Aw01 - Aw02 - Aw10 - Aw11 + Aw12 - Aw20 - Aw21 + Aw22;
4936                              const double tmp17_1 = A_10*w1;                              EM_S[INDEX2(2,3,8)]+=-Aw00 - Aw01 + Aw02 + Aw10 + Aw11 - Aw12 - Aw20 - Aw21 + Aw22;
4937                              EM_S[INDEX2(0,0,8)]+=tmp0_1 + tmp22_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(3,3,8)]+= Aw00 + Aw01 - Aw02 + Aw10 + Aw11 - Aw12 - Aw20 - Aw21 + Aw22;
4938                              EM_S[INDEX2(1,0,8)]+=tmp17_1 + tmp20_1 + tmp23_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;                              EM_S[INDEX2(4,3,8)]+=-Aw00 - Aw01 + Aw02 - Aw10 - Aw11 + Aw12 + Aw20 + Aw21 - Aw22;
4939                              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(5,3,8)]+= Aw00 + Aw01 - Aw02 - Aw10 - Aw11 + Aw12 + Aw20 + Aw21 - Aw22;
4940                              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(6,3,8)]+=-Aw00 - Aw01 + Aw02 + Aw10 + Aw11 - Aw12 + Aw20 + Aw21 - Aw22;
4941                              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(7,3,8)]+= Aw00 + Aw01 - Aw02 + Aw10 + Aw11 - Aw12 + Aw20 + Aw21 - Aw22;
4942                              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(0,4,8)]+= Aw00 + Aw01 - Aw02 + Aw10 + Aw11 - Aw12 + Aw20 + Aw21 - Aw22;
4943                              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(1,4,8)]+=-Aw00 - Aw01 + Aw02 + Aw10 + Aw11 - Aw12 + Aw20 + Aw21 - Aw22;
4944                              EM_S[INDEX2(7,0,8)]+=tmp10_1 + tmp11_1 + tmp15_1 + tmp18_1 + tmp3_1 + tmp8_1;                              EM_S[INDEX2(2,4,8)]+= Aw00 + Aw01 - Aw02 - Aw10 - Aw11 + Aw12 + Aw20 + Aw21 - Aw22;
4945                              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(3,4,8)]+=-Aw00 - Aw01 + Aw02 - Aw10 - Aw11 + Aw12 + Aw20 + Aw21 - Aw22;
4946                              EM_S[INDEX2(1,1,8)]+=tmp11_1 + tmp15_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(4,4,8)]+= Aw00 + Aw01 - Aw02 + Aw10 + Aw11 - Aw12 - Aw20 - Aw21 + Aw22;
4947                              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(5,4,8)]+=-Aw00 - Aw01 + Aw02 + Aw10 + Aw11 - Aw12 - Aw20 - Aw21 + Aw22;
4948                              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(6,4,8)]+= Aw00 + Aw01 - Aw02 - Aw10 - Aw11 + Aw12 - Aw20 - Aw21 + Aw22;
4949                              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(7,4,8)]+=-Aw00 - Aw01 + Aw02 - Aw10 - Aw11 + Aw12 - Aw20 - Aw21 + Aw22;
4950                              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(0,5,8)]+=-Aw00 + Aw01 - Aw02 - Aw10 + Aw11 - Aw12 - Aw20 + Aw21 - Aw22;
4951                              EM_S[INDEX2(6,1,8)]+=tmp0_1 + tmp10_1 + tmp18_1 + tmp22_1 + tmp3_1 + tmp8_1;                              EM_S[INDEX2(1,5,8)]+= Aw00 - Aw01 + Aw02 - Aw10 + Aw11 - Aw12 - Aw20 + Aw21 - Aw22;
4952                              EM_S[INDEX2(7,1,8)]+=tmp10_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp2_1 + tmp3_1 + tmp6_1 + tmp7_1;                              EM_S[INDEX2(2,5,8)]+=-Aw00 + Aw01 - Aw02 + Aw10 - Aw11 + Aw12 - Aw20 + Aw21 - Aw22;
4953                              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(3,5,8)]+= Aw00 - Aw01 + Aw02 + Aw10 - Aw11 + Aw12 - Aw20 + Aw21 - Aw22;
4954                              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(4,5,8)]+=-Aw00 + Aw01 - Aw02 - Aw10 + Aw11 - Aw12 + Aw20 - Aw21 + Aw22;
4955                              EM_S[INDEX2(2,2,8)]+=tmp11_1 + tmp18_1 + tmp22_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(5,5,8)]+= Aw00 - Aw01 + Aw02 - Aw10 + Aw11 - Aw12 + Aw20 - Aw21 + Aw22;
4956                              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(6,5,8)]+=-Aw00 + Aw01 - Aw02 + Aw10 - Aw11 + Aw12 + Aw20 - Aw21 + Aw22;
4957                              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(7,5,8)]+= Aw00 - Aw01 + Aw02 + Aw10 - Aw11 + Aw12 + Aw20 - Aw21 + Aw22;
4958                              EM_S[INDEX2(5,2,8)]+=tmp0_1 + tmp10_1 + tmp15_1 + tmp23_1 + tmp3_1 + tmp8_1;                              EM_S[INDEX2(0,6,8)]+= Aw00 - Aw01 - Aw02 + Aw10 - Aw11 - Aw12 + Aw20 - Aw21 - Aw22;
4959                              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)]+=-Aw00 + Aw01 + Aw02 + Aw10 - Aw11 - Aw12 + Aw20 - Aw21 - Aw22;
4960                              EM_S[INDEX2(7,2,8)]+=tmp12_1 + tmp15_1 + tmp16_1 + tmp1_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp8_1;                              EM_S[INDEX2(2,6,8)]+= Aw00 - Aw01 - Aw02 - Aw10 + Aw11 + Aw12 + Aw20 - Aw21 - Aw22;
4961                              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(3,6,8)]+=-Aw00 + Aw01 + Aw02 - Aw10 + Aw11 + Aw12 + Aw20 - Aw21 - Aw22;
4962                              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(4,6,8)]+= Aw00 - Aw01 - Aw02 + Aw10 - Aw11 - Aw12 - Aw20 + Aw21 + Aw22;
4963                              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(5,6,8)]+=-Aw00 + Aw01 + Aw02 + Aw10 - Aw11 - Aw12 - Aw20 + Aw21 + Aw22;
4964                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp15_1 + tmp18_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(6,6,8)]+= Aw00 - Aw01 - Aw02 - Aw10 + Aw11 + Aw12 - Aw20 + Aw21 + Aw22;
4965                              EM_S[INDEX2(4,3,8)]+=tmp10_1 + tmp11_1 + tmp22_1 + tmp23_1 + tmp3_1 + tmp8_1;                              EM_S[INDEX2(7,6,8)]+=-Aw00 + Aw01 + Aw02 - Aw10 + Aw11 + Aw12 - Aw20 + Aw21 + Aw22;
4966                              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(0,7,8)]+=-Aw00 - Aw01 - Aw02 - Aw10 - Aw11 - Aw12 - Aw20 - Aw21 - Aw22;
4967                              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(1,7,8)]+= Aw00 + Aw01 + Aw02 - Aw10 - Aw11 - Aw12 - Aw20 - Aw21 - Aw22;
4968                              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(2,7,8)]+=-Aw00 - Aw01 - Aw02 + Aw10 + Aw11 + Aw12 - Aw20 - Aw21 - Aw22;
4969                              EM_S[INDEX2(0,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1 + tmp6_1 + tmp7_1;                              EM_S[INDEX2(3,7,8)]+= Aw00 + Aw01 + Aw02 + Aw10 + Aw11 + Aw12 - Aw20 - Aw21 - Aw22;
4970                              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(4,7,8)]+=-Aw00 - Aw01 - Aw02 - Aw10 - Aw11 - Aw12 + Aw20 + Aw21 + Aw22;
4971                              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(5,7,8)]+= Aw00 + Aw01 + Aw02 - Aw10 - Aw11 - Aw12 + Aw20 + Aw21 + Aw22;
4972                              EM_S[INDEX2(3,4,8)]+=tmp10_1 + tmp11_1 + tmp22_1 + tmp23_1 + tmp3_1 + tmp8_1;                              EM_S[INDEX2(6,7,8)]+=-Aw00 - Aw01 - Aw02 + Aw10 + Aw11 + Aw12 + Aw20 + Aw21 + Aw22;
4973                              EM_S[INDEX2(4,4,8)]+=tmp0_1 + tmp15_1 + tmp18_1 + tmp2_1 + tmp4_1 + tmp9_1;                              EM_S[INDEX2(7,7,8)]+= Aw00 + Aw01 + Aw02 + Aw10 + Aw11 + Aw12 + Aw20 + Aw21 + Aw22;
                             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(6,4,8)]+=tmp10_1 + tmp12_1 + tmp13_1 + tmp14_1 + tmp15_1 + tmp16_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;  
                             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(1,5,8)]+=tmp11_1 + tmp19_1 + tmp1_1 + tmp21_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(2,5,8)]+=tmp0_1 + tmp10_1 + tmp15_1 + tmp23_1 + tmp3_1 + tmp8_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(4,5,8)]+=tmp12_1 + tmp16_1 + tmp18_1 + tmp4_1 + tmp6_1 + tmp7_1 + tmp8_1 + tmp9_1;  
                             EM_S[INDEX2(5,5,8)]+=tmp11_1 + tmp18_1 + tmp22_1 + tmp2_1 + tmp4_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;  
                             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,6,8)]+=tmp10_1 + tmp17_1 + tmp18_1 + tmp20_1 + tmp2_1 + tmp3_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(2,6,8)]+=tmp11_1 + tmp13_1 + tmp14_1 + tmp2_1 + tmp3_1 + tmp4_1 + tmp6_1 + tmp7_1;  
                             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(4,6,8)]+=tmp10_1 + tmp15_1 + tmp17_1 + tmp1_1 + tmp20_1 + tmp2_1 + tmp5_1 + tmp9_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(6,6,8)]+=tmp11_1 + tmp15_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;  
                             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(0,7,8)]+=tmp10_1 + tmp11_1 + tmp15_1 + tmp18_1 + tmp3_1 + tmp8_1;  
                             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(2,7,8)]+=tmp13_1 + tmp14_1 + tmp15_1 + tmp17_1 + tmp20_1 + tmp3_1 + tmp4_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;  
                             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(5,7,8)]+=tmp10_1 + tmp12_1 + tmp16_1 + tmp1_1 + tmp22_1 + tmp2_1 + tmp5_1 + tmp9_1;  
                             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(7,7,8)]+=tmp0_1 + tmp22_1 + tmp23_1 + tmp2_1 + tmp4_1 + tmp9_1;  
4974                          }                          }
4975                          ///////////////                          ///////////////
4976                          // process B //                          // process B //
# Line 5049  void Brick::assemblePDESingleReduced(Pas Line 4978  void Brick::assemblePDESingleReduced(Pas
4978                          if (!B.isEmpty()) {                          if (!B.isEmpty()) {
4979                              add_EM_S=true;                              add_EM_S=true;
4980                              const double* B_p=const_cast<escript::Data*>(&B)->getSampleDataRO(e);                              const double* B_p=const_cast<escript::Data*>(&B)->getSampleDataRO(e);
4981                              const double B_0 = B_p[0];                              const double wB0 = B_p[0]*w12;
4982                              const double B_1 = B_p[1];                              const double wB1 = B_p[1]*w13;
4983                              const double B_2 = B_p[2];                              const double wB2 = B_p[2]*w14;
4984                              const double tmp4_1 = B_0*w15;                              EM_S[INDEX2(0,0,8)]+=-wB0 - wB1 - wB2;
4985                              const double tmp3_1 = B_1*w16;                              EM_S[INDEX2(0,1,8)]+=-wB0 - wB1 - wB2;
4986                              const double tmp2_1 = B_0*w12;                              EM_S[INDEX2(0,2,8)]+=-wB0 - wB1 - wB2;
4987                              const double tmp5_1 = B_2*w17;                              EM_S[INDEX2(0,3,8)]+=-wB0 - wB1 - wB2;
4988                              const double tmp1_1 = B_2*w14;                              EM_S[INDEX2(0,4,8)]+=-wB0 - wB1 - wB2;
4989                              const double tmp0_1 = B_1*w13;                              EM_S[INDEX2(0,5,8)]+=-wB0 - wB1 - wB2;
4990                              EM_S[INDEX2(0,0,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(0,6,8)]+=-wB0 - wB1 - wB2;
4991                              EM_S[INDEX2(1,0,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(0,7,8)]+=-wB0 - wB1 - wB2;
4992                              EM_S[INDEX2(2,0,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(1,0,8)]+= wB0 - wB1 - wB2;
4993                              EM_S[INDEX2(3,0,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(1,1,8)]+= wB0 - wB1 - wB2;
4994                              EM_S[INDEX2(4,0,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(1,2,8)]+= wB0 - wB1 - wB2;
4995                              EM_S[INDEX2(5,0,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(1,3,8)]+= wB0 - wB1 - wB2;
4996                              EM_S[INDEX2(6,0,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(1,4,8)]+= wB0 - wB1 - wB2;
4997                              EM_S[INDEX2(7,0,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(1,5,8)]+= wB0 - wB1 - wB2;
4998                              EM_S[INDEX2(0,1,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(1,6,8)]+= wB0 - wB1 - wB2;
4999                              EM_S[INDEX2(1,1,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(1,7,8)]+= wB0 - wB1 - wB2;
5000                              EM_S[INDEX2(2,1,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(2,0,8)]+=-wB0 + wB1 - wB2;
5001                              EM_S[INDEX2(3,1,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(2,1,8)]+=-wB0 + wB1 - wB2;
5002                              EM_S[INDEX2(4,1,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(2,2,8)]+=-wB0 + wB1 - wB2;
5003                              EM_S[INDEX2(5,1,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(2,3,8)]+=-wB0 + wB1 - wB2;
5004                              EM_S[INDEX2(6,1,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(2,4,8)]+=-wB0 + wB1 - wB2;
5005                              EM_S[INDEX2(7,1,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(2,5,8)]+=-wB0 + wB1 - wB2;
5006                              EM_S[INDEX2(0,2,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(2,6,8)]+=-wB0 + wB1 - wB2;
5007                              EM_S[INDEX2(1,2,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(2,7,8)]+=-wB0 + wB1 - wB2;
5008                              EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(3,0,8)]+= wB0 + wB1 - wB2;
5009                              EM_S[INDEX2(3,2,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(3,1,8)]+= wB0 + wB1 - wB2;
5010                              EM_S[INDEX2(4,2,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(3,2,8)]+= wB0 + wB1 - wB2;
5011                              EM_S[INDEX2(5,2,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(3,3,8)]+= wB0 + wB1 - wB2;
5012                              EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(3,4,8)]+= wB0 + wB1 - wB2;
5013                              EM_S[INDEX2(7,2,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(3,5,8)]+= wB0 + wB1 - wB2;
5014                              EM_S[INDEX2(0,3,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(3,6,8)]+= wB0 + wB1 - wB2;
5015                              EM_S[INDEX2(1,3,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(3,7,8)]+= wB0 + wB1 - wB2;
5016                              EM_S[INDEX2(2,3,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,0,8)]+=-wB0 - wB1 + wB2;
5017                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(4,1,8)]+=-wB0 - wB1 + wB2;
5018                              EM_S[INDEX2(4,3,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(4,2,8)]+=-wB0 - wB1 + wB2;
5019                              EM_S[INDEX2(5,3,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(4,3,8)]+=-wB0 - wB1 + wB2;
5020                              EM_S[INDEX2(6,3,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(4,4,8)]+=-wB0 - wB1 + wB2;
5021                              EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(4,5,8)]+=-wB0 - wB1 + wB2;
5022                              EM_S[INDEX2(0,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,6,8)]+=-wB0 - wB1 + wB2;
5023                              EM_S[INDEX2(1,4,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(4,7,8)]+=-wB0 - wB1 + wB2;
5024                              EM_S[INDEX2(2,4,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(5,0,8)]+= wB0 - wB1 + wB2;
5025                              EM_S[INDEX2(3,4,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(5,1,8)]+= wB0 - wB1 + wB2;
5026                              EM_S[INDEX2(4,4,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(5,2,8)]+= wB0 - wB1 + wB2;
5027                              EM_S[INDEX2(5,4,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(5,3,8)]+= wB0 - wB1 + wB2;
5028                              EM_S[INDEX2(6,4,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(5,4,8)]+= wB0 - wB1 + wB2;
5029                              EM_S[INDEX2(7,4,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(5,5,8)]+= wB0 - wB1 + wB2;
5030                              EM_S[INDEX2(0,5,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(5,6,8)]+= wB0 - wB1 + wB2;
5031                              EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(5,7,8)]+= wB0 - wB1 + wB2;
5032                              EM_S[INDEX2(2,5,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(6,0,8)]+=-wB0 + wB1 + wB2;
5033                              EM_S[INDEX2(3,5,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(6,1,8)]+=-wB0 + wB1 + wB2;
5034                              EM_S[INDEX2(4,5,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(6,2,8)]+=-wB0 + wB1 + wB2;
5035                              EM_S[INDEX2(5,5,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(6,3,8)]+=-wB0 + wB1 + wB2;
5036                              EM_S[INDEX2(6,5,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(6,4,8)]+=-wB0 + wB1 + wB2;
5037                              EM_S[INDEX2(7,5,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(6,5,8)]+=-wB0 + wB1 + wB2;
5038                              EM_S[INDEX2(0,6,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(6,6,8)]+=-wB0 + wB1 + wB2;
5039                              EM_S[INDEX2(1,6,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(6,7,8)]+=-wB0 + wB1 + wB2;
5040                              EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(7,0,8)]+= wB0 + wB1 + wB2;
5041                              EM_S[INDEX2(3,6,8)]+=tmp0_1 + tmp2_1 + tmp5_1;                              EM_S[INDEX2(7,1,8)]+= wB0 + wB1 + wB2;
5042                              EM_S[INDEX2(4,6,8)]+=tmp1_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(7,2,8)]+= wB0 + wB1 + wB2;
5043                              EM_S[INDEX2(5,6,8)]+=tmp1_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(7,3,8)]+= wB0 + wB1 + wB2;
5044                              EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp1_1 + tmp4_1;                              EM_S[INDEX2(7,4,8)]+= wB0 + wB1 + wB2;
5045                              EM_S[INDEX2(7,6,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(7,5,8)]+= wB0 + wB1 + wB2;
5046                              EM_S[INDEX2(0,7,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(7,6,8)]+= wB0 + wB1 + wB2;
5047                              EM_S[INDEX2(1,7,8)]+=tmp2_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(7,7,8)]+= wB0 + wB1 + wB2;
                             EM_S[INDEX2(2,7,8)]+=tmp0_1 + tmp4_1 + tmp5_1;  
                             EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp2_1 + tmp5_1;  
                             EM_S[INDEX2(4,7,8)]+=tmp1_1 + tmp3_1 + tmp4_1;  
                             EM_S[INDEX2(5,7,8)]+=tmp1_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(6,7,8)]+=tmp0_1 + tmp1_1 + tmp4_1;  
                             EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp1_1 + tmp2_1;  
5048                          }                          }
5049                          ///////////////                          ///////////////
5050                          // process C //                          // process C //
# Line 5129  void Brick::assemblePDESingleReduced(Pas Line 5052  void Brick::assemblePDESingleReduced(Pas
5052                          if (!C.isEmpty()) {                          if (!C.isEmpty()) {
5053                              add_EM_S=true;                              add_EM_S=true;
5054                              const double* C_p=const_cast<escript::Data*>(&C)->getSampleDataRO(e);                              const double* C_p=const_cast<escript::Data*>(&C)->getSampleDataRO(e);
5055                              const double C_0 = C_p[0];                              const double wC0 = C_p[0]*w12;
5056                              const double C_1 = C_p[1];                              const double wC1 = C_p[1]*w13;
5057                              const double C_2 = C_p[2];                              const double wC2 = C_p[2]*w14;
5058                              const double tmp5_1 = C_0*w15;                              EM_S[INDEX2(0,0,8)]+=-wC0 - wC1 - wC2;
5059                              const double tmp2_1 = C_0*w12;                              EM_S[INDEX2(1,0,8)]+=-wC0 - wC1 - wC2;
5060                              const double tmp4_1 = C_1*w16;                              EM_S[INDEX2(2,0,8)]+=-wC0 - wC1 - wC2;
5061                              const double tmp1_1 = C_2*w17;                              EM_S[INDEX2(3,0,8)]+=-wC0 - wC1 - wC2;
5062                              const double tmp3_1 = C_2*w14;                              EM_S[INDEX2(4,0,8)]+=-wC0 - wC1 - wC2;
5063                              const double tmp0_1 = C_1*w13;                              EM_S[INDEX2(5,0,8)]+=-wC0 - wC1 - wC2;
5064                              EM_S[INDEX2(0,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(6,0,8)]+=-wC0 - wC1 - wC2;
5065                              EM_S[INDEX2(1,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(7,0,8)]+=-wC0 - wC1 - wC2;
5066                              EM_S[INDEX2(2,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(0,1,8)]+= wC0 - wC1 - wC2;
5067                              EM_S[INDEX2(3,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(1,1,8)]+= wC0 - wC1 - wC2;
5068                              EM_S[INDEX2(4,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(2,1,8)]+= wC0 - wC1 - wC2;
5069                              EM_S[INDEX2(5,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(3,1,8)]+= wC0 - wC1 - wC2;
5070                              EM_S[INDEX2(6,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,1,8)]+= wC0 - wC1 - wC2;
5071                              EM_S[INDEX2(7,0,8)]+=tmp1_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(5,1,8)]+= wC0 - wC1 - wC2;
5072                              EM_S[INDEX2(0,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(6,1,8)]+= wC0 - wC1 - wC2;
5073                              EM_S[INDEX2(1,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(7,1,8)]+= wC0 - wC1 - wC2;
5074                              EM_S[INDEX2(2,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(0,2,8)]+=-wC0 + wC1 - wC2;
5075                              EM_S[INDEX2(3,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(1,2,8)]+=-wC0 + wC1 - wC2;
5076                              EM_S[INDEX2(4,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(2,2,8)]+=-wC0 + wC1 - wC2;
5077                              EM_S[INDEX2(5,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(3,2,8)]+=-wC0 + wC1 - wC2;
5078                              EM_S[INDEX2(6,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(4,2,8)]+=-wC0 + wC1 - wC2;
5079                              EM_S[INDEX2(7,1,8)]+=tmp1_1 + tmp2_1 + tmp4_1;                              EM_S[INDEX2(5,2,8)]+=-wC0 + wC1 - wC2;
5080                              EM_S[INDEX2(0,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(6,2,8)]+=-wC0 + wC1 - wC2;
5081                              EM_S[INDEX2(1,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(7,2,8)]+=-wC0 + wC1 - wC2;
5082                              EM_S[INDEX2(2,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(0,3,8)]+= wC0 + wC1 - wC2;
5083                              EM_S[INDEX2(3,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(1,3,8)]+= wC0 + wC1 - wC2;
5084                              EM_S[INDEX2(4,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(2,3,8)]+= wC0 + wC1 - wC2;
5085                              EM_S[INDEX2(5,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(3,3,8)]+= wC0 + wC1 - wC2;
5086                              EM_S[INDEX2(6,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(4,3,8)]+= wC0 + wC1 - wC2;
5087                              EM_S[INDEX2(7,2,8)]+=tmp0_1 + tmp1_1 + tmp5_1;                              EM_S[INDEX2(5,3,8)]+= wC0 + wC1 - wC2;
5088                              EM_S[INDEX2(0,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(6,3,8)]+= wC0 + wC1 - wC2;
5089                              EM_S[INDEX2(1,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(7,3,8)]+= wC0 + wC1 - wC2;
5090                              EM_S[INDEX2(2,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(0,4,8)]+=-wC0 - wC1 + wC2;
5091                              EM_S[INDEX2(3,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(1,4,8)]+=-wC0 - wC1 + wC2;
5092                              EM_S[INDEX2(4,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(2,4,8)]+=-wC0 - wC1 + wC2;
5093                              EM_S[INDEX2(5,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(3,4,8)]+=-wC0 - wC1 + wC2;
5094                              EM_S[INDEX2(6,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(4,4,8)]+=-wC0 - wC1 + wC2;
5095                              EM_S[INDEX2(7,3,8)]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_S[INDEX2(5,4,8)]+=-wC0 - wC1 + wC2;
5096                              EM_S[INDEX2(0,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(6,4,8)]+=-wC0 - wC1 + wC2;
5097                              EM_S[INDEX2(1,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(7,4,8)]+=-wC0 - wC1 + wC2;
5098                              EM_S[INDEX2(2,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(0,5,8)]+= wC0 - wC1 + wC2;
5099                              EM_S[INDEX2(3,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(1,5,8)]+= wC0 - wC1 + wC2;
5100                              EM_S[INDEX2(4,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(2,5,8)]+= wC0 - wC1 + wC2;
5101                              EM_S[INDEX2(5,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(3,5,8)]+= wC0 - wC1 + wC2;
5102                              EM_S[INDEX2(6,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(4,5,8)]+= wC0 - wC1 + wC2;
5103                              EM_S[INDEX2(7,4,8)]+=tmp3_1 + tmp4_1 + tmp5_1;                              EM_S[INDEX2(5,5,8)]+= wC0 - wC1 + wC2;
5104                              EM_S[INDEX2(0,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(6,5,8)]+= wC0 - wC1 + wC2;
5105                              EM_S[INDEX2(1,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(7,5,8)]+= wC0 - wC1 + wC2;
5106                              EM_S[INDEX2(2,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(0,6,8)]+=-wC0 + wC1 + wC2;
5107                              EM_S[INDEX2(3,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(1,6,8)]+=-wC0 + wC1 + wC2;
5108                              EM_S[INDEX2(4,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(2,6,8)]+=-wC0 + wC1 + wC2;
5109                              EM_S[INDEX2(5,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(3,6,8)]+=-wC0 + wC1 + wC2;
5110                              EM_S[INDEX2(6,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(4,6,8)]+=-wC0 + wC1 + wC2;
5111                              EM_S[INDEX2(7,5,8)]+=tmp2_1 + tmp3_1 + tmp4_1;                              EM_S[INDEX2(5,6,8)]+=-wC0 + wC1 + wC2;
5112                              EM_S[INDEX2(0,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(6,6,8)]+=-wC0 + wC1 + wC2;
5113                              EM_S[INDEX2(1,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(7,6,8)]+=-wC0 + wC1 + wC2;
5114                              EM_S[INDEX2(2,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(0,7,8)]+= wC0 + wC1 + wC2;
5115                              EM_S[INDEX2(3,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(1,7,8)]+= wC0 + wC1 + wC2;
5116                              EM_S[INDEX2(4,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(2,7,8)]+= wC0 + wC1 + wC2;
5117                              EM_S[INDEX2(5,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(3,7,8)]+= wC0 + wC1 + wC2;
5118                              EM_S[INDEX2(6,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(4,7,8)]+= wC0 + wC1 + wC2;
5119                              EM_S[INDEX2(7,6,8)]+=tmp0_1 + tmp3_1 + tmp5_1;                              EM_S[INDEX2(5,7,8)]+= wC0 + wC1 + wC2;
5120                              EM_S[INDEX2(0,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(6,7,8)]+= wC0 + wC1 + wC2;
5121                              EM_S[INDEX2(1,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;                              EM_S[INDEX2(7,7,8)]+= wC0 + wC1 + wC2;
                             EM_S[INDEX2(2,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(3,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(4,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(5,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(6,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
                             EM_S[INDEX2(7,7,8)]+=tmp0_1 + tmp2_1 + tmp3_1;  
5122                          }                          }
5123                          ///////////////                          ///////////////
5124                          // process D //                          // process D //
# Line 5209  void Brick::assemblePDESingleReduced(Pas Line 5126  void Brick::assemblePDESingleReduced(Pas
5126                          if (!D.isEmpty()) {                          if (!D.isEmpty()) {
5127                              add_EM_S=true;                              add_EM_S=true;
5128                              const double* D_p=const_cast<escript::Data*>(&D)->getSampleDataRO(e);                              const double* D_p=const_cast<escript::Data*>(&D)->getSampleDataRO(e);
5129                              const double tmp0_1 = D_p[0]*w18;                              EM_S[INDEX2(0,0,8)]+=D_p[0]*w18;
5130                              EM_S[INDEX2(0,0,8)]+=tmp0_1;                              EM_S[INDEX2(1,0,8)]+=D_p[0]*w18;
5131                              EM_S[INDEX2(1,0,8)]+=tmp0_1;                              EM_S[INDEX2(2,0,8)]+=D_p[0]*w18;
5132                              EM_S[INDEX2(2,0,8)]+=tmp0_1;                              EM_S[INDEX2(3,0,8)]+=D_p[0]*w18;
5133                              EM_S[INDEX2(3,0,8)]+=tmp0_1;                              EM_S[INDEX2(4,0,8)]+=D_p[0]*w18;
5134                              EM_S[INDEX2(4,0,8)]+=tmp0_1;                              EM_S[INDEX2(5,0,8)]+=D_p[0]*w18;
5135                              EM_S[INDEX2(5,0,8)]+=tmp0_1;                              EM_S[INDEX2(6,0,8)]+=D_p[0]*w18;
5136                              EM_S[INDEX2(6,0,8)]+=tmp0_1;                              EM_S[INDEX2(7,0,8)]+=D_p[0]*w18;
5137                              EM_S[INDEX2(7,0,8)]+=tmp0_1;                              EM_S[INDEX2(0,1,8)]+=D_p[0]*w18;
5138                              EM_S[INDEX2(0,1,8)]+=tmp0_1;                              EM_S[INDEX2(1,1,8)]+=D_p[0]*w18;
5139                              EM_S[INDEX2(1,1,8)]+=tmp0_1;                              EM_S[INDEX2(2,1,8)]+=D_p[0]*w18;
5140                              EM_S[INDEX2(2,1,8)]+=tmp0_1;                              EM_S[INDEX2(3,1,8)]+=D_p[0]*w18;
5141                              EM_S[INDEX2(3,1,8)]+=tmp0_1;                              EM_S[INDEX2(4,1,8)]+=D_p[0]*w18;
5142                              EM_S[INDEX2(4,1,8)]+=tmp0_1;                              EM_S[INDEX2(5,1,8)]+=D_p[0]*w18;
5143                              EM_S[INDEX2(5,1,8)]+=tmp0_1;                              EM_S[INDEX2(6,1,8)]+=D_p[0]*w18;
5144                              EM_S[INDEX2(6,1,8)]+=tmp0_1;                              EM_S[INDEX2(7,1,8)]+=D_p[0]*w18;
5145                              EM_S[INDEX2(7,1,8)]+=tmp0_1;                              EM_S[INDEX2(0,2,8)]+=D_p[0]*w18;
5146                              EM_S[INDEX2(0,2,8)]+=tmp0_1;                              EM_S[INDEX2(1,2,8)]+=D_p[0]*w18;
5147                              EM_S[INDEX2(1,2,8)]+=tmp0_1;                              EM_S[INDEX2(2,2,8)]+=D_p[0]*w18;
5148                              EM_S[INDEX2(2,2,8)]+=tmp0_1;                              EM_S[INDEX2(3,2,8)]+=D_p[0]*w18;
5149                              EM_S[INDEX2(3,2,8)]+=tmp0_1;                              EM_S[INDEX2(4,2,8)]+=D_p[0]*w18;
5150                              EM_S[INDEX2(4,2,8)]+=tmp0_1;                              EM_S[INDEX2(5,2,8)]+=D_p[0]*w18;
5151                              EM_S[INDEX2(5,2,8)]+=tmp0_1;                              EM_S[INDEX2(6,2,8)]+=D_p[0]*w18;
5152                              EM_S[INDEX2(6,2,8)]+=tmp0_1;                              EM_S[INDEX2(7,2,8)]+=D_p[0]*w18;
5153                              EM_S[INDEX2(7,2,8)]+=tmp0_1;                              EM_S[INDEX2(0,3,8)]+=D_p[0]*w18;
5154                              EM_S[INDEX2(0,3,8)]+=tmp0_1;                              EM_S[INDEX2(1,3,8)]+=D_p[0]*w18;
5155                              EM_S[INDEX2(1,3,8)]+=tmp0_1;                              EM_S[INDEX2(2,3,8)]+=D_p[0]*w18;
5156                              EM_S[INDEX2(2,3,8)]+=tmp0_1;                              EM_S[INDEX2(3,3,8)]+=D_p[0]*w18;
5157                              EM_S[INDEX2(3,3,8)]+=tmp0_1;                              EM_S[INDEX2(4,3,8)]+=D_p[0]*w18;
5158                              EM_S[INDEX2(4,3,8)]+=tmp0_1;                              EM_S[INDEX2(5,3,8)]+=D_p[0]*w18;
5159                              EM_S[INDEX2(5,3,8)]+=tmp0_1;                              EM_S[INDEX2(6,3,8)]+=D_p[0]*w18;
5160                              EM_S[INDEX2(6,3,8)]+=tmp0_1;                              EM_S[INDEX2(7,3,8)]+=D_p[0]*w18;
5161                              EM_S[INDEX2(7,3,8)]+=tmp0_1;                              EM_S[INDEX2(0,4,8)]+=D_p[0]*w18;
5162                              EM_S[INDEX2(0,4,8)]+=tmp0_1;                              EM_S[INDEX2(1,4,8)]+=D_p[0]*w18;
5163                              EM_S[INDEX2(1,4,8)]+=tmp0_1;                              EM_S[INDEX2(2,4,8)]+=D_p[0]*w18;
5164                              EM_S[INDEX2(2,4,8)]+=tmp0_1;                              EM_S[INDEX2(3,4,8)]+=D_p[0]*w18;
5165                              EM_S[INDEX2(3,4,8)]+=tmp0_1;                              EM_S[INDEX2(4,4,8)]+=D_p[0]*w18;
5166                              EM_S[INDEX2(4,4,8)]+=tmp0_1;                              EM_S[INDEX2(5,4,8)]+=D_p[0]*w18;
5167                              EM_S[INDEX2(5,4,8)]+=tmp0_1;                              EM_S[INDEX2(6,4,8)]+=D_p[0]*w18;
5168                              EM_S[INDEX2(6,4,8)]+=tmp0_1;                              EM_S[INDEX2(7,4,8)]+=D_p[0]*w18;
5169                              EM_S[INDEX2(7,4,8)]+=tmp0_1;                              EM_S[INDEX2(0,5,8)]+=D_p[0]*w18;
5170                              EM_S[INDEX2(0,5,8)]+=tmp0_1;                              EM_S[INDEX2(1,5,8)]+=D_p[0]*w18;
5171                              EM_S[INDEX2(1,5,8)]+=tmp0_1;                              EM_S[INDEX2(2,5,8)]+=D_p[0]*w18;
5172                              EM_S[INDEX2(2,5,8)]+=tmp0_1;                              EM_S[INDEX2(3,5,8)]+=D_p[0]*w18;
5173                              EM_S[INDEX2(3,5,8)]+=tmp0_1;                              EM_S[INDEX2(4,5,8)]+=D_p[0]*w18;
5174                              EM_S[INDEX2(4,5,8)]+=tmp0_1;                              EM_S[INDEX2(5,5,8)]+=D_p[0]*w18;
5175                              EM_S[INDEX2(5,5,8)]+=tmp0_1;                              EM_S[INDEX2(6,5,8)]+=D_p[0]*w18;
5176                              EM_S[INDEX2(6,5,8)]+=tmp0_1;                              EM_S[INDEX2(7,5,8)]+=D_p[0]*w18;
5177                              EM_S[INDEX2(7,5,8)]+=tmp0_1;                              EM_S[INDEX2(0,6,8)]+=D_p[0]*w18;
5178                              EM_S[INDEX2(0,6,8)]+=tmp0_1;                              EM_S[INDEX2(1,6,8)]+=D_p[0]*w18;
5179                              EM_S[INDEX2(1,6,8)]+=tmp0_1;                              EM_S[INDEX2(2,6,8)]+=D_p[0]*w18;
5180                              EM_S[INDEX2(2,6,8)]+=tmp0_1;                              EM_S[INDEX2(3,6,8)]+=D_p[0]*w18;
5181                              EM_S[INDEX2(3,6,8)]+=tmp0_1;                              EM_S[INDEX2(4,6,8)]+=D_p[0]*w18;
5182                              EM_S[INDEX2(4,6,8)]+=tmp0_1;                              EM_S[INDEX2(5,6,8)]+=D_p[0]*w18;
5183                              EM_S[INDEX2(5,6,8)]+=tmp0_1;                              EM_S[INDEX2(6,6,8)]+=D_p[0]*w18;
5184                              EM_S[INDEX2(6,6,8)]+=tmp0_1;                              EM_S[INDEX2(7,6,8)]+=D_p[0]*w18;
5185                              EM_S[INDEX2(7,6,8)]+=tmp0_1;                              EM_S[INDEX2(0,7,8)]+=D_p[0]*w18;
5186                              EM_S[INDEX2(0,7,8)]+=tmp0_1;                              EM_S[INDEX2(1,7,8)]+=D_p[0]*w18;
5187                              EM_S[INDEX2(1,7,8)]+=tmp0_1;                              EM_S[INDEX2(2,7,8)]+=D_p[0]*w18;
5188                              EM_S[INDEX2(2,7,8)]+=tmp0_1;                              EM_S[INDEX2(3,7,8)]+=D_p[0]*w18;
5189                              EM_S[INDEX2(3,7,8)]+=tmp0_1;                              EM_S[INDEX2(4,7,8)]+=D_p[0]*w18;
5190                              EM_S[INDEX2(4,7,8)]+=tmp0_1;                              EM_S[INDEX2(5,7,8)]+=D_p[0]*w18;
5191                              EM_S[INDEX2(5,7,8)]+=tmp0_1;                              EM_S[INDEX2(6,7,8)]+=D_p[0]*w18;
5192                              EM_S[INDEX2(6,7,8)]+=tmp0_1;                              EM_S[INDEX2(7,7,8)]+=D_p[0]*w18;
                             EM_S[INDEX2(7,7,8)]+=tmp0_1;  
5193                          }                          }
5194                          ///////////////                          ///////////////
5195                          // process X //                          // process X //
# Line 5281  void Brick::assemblePDESingleReduced(Pas Line 5197  void Brick::assemblePDESingleReduced(Pas
5197                          if (!X.isEmpty()) {                          if (!X.isEmpty()) {
5198                              add_EM_F=true;                              add_EM_F=true;
5199                              const double* X_p=const_cast<escript::Data*>(&X)->getSampleDataRO(e);                              const double* X_p=const_cast<escript::Data*>(&X)->getSampleDataRO(e);
5200                              const double X_0 = X_p[0];                              const double wX0 = 8*X_p[0]*w12;
5201                              const double X_1 = X_p[1];                              const double wX1 = 8*X_p[1]*w13;
5202                              const double X_2 = X_p[2];                              const double wX2 = 8*X_p[2]*w14;
5203                              const double tmp0_1 = X_2*w21;                              EM_F[0]+=-wX0 - wX1 - wX2;
5204                              const double tmp1_1 = X_0*w19;                              EM_F[1]+= wX0 - wX1 - wX2;
5205                              const double tmp2_1 = X_1*w20;                              EM_F[2]+=-wX0 + wX1 - wX2;
5206                              const double tmp3_1 = X_0*w22;                              EM_F[3]+= wX0 + wX1 - wX2;
5207                              const double tmp4_1 = X_1*w23;                              EM_F[4]+=-wX0 - wX1 + wX2;
5208                              const double tmp5_1 = X_2*w24;                              EM_F[5]+= wX0 - wX1 + wX2;
5209                              EM_F[0]+=tmp0_1 + tmp1_1 + tmp2_1;                              EM_F[6]+=-wX0 + wX1 + wX2;
5210                              EM_F[1]+=tmp0_1 + tmp2_1 + tmp3_1;                              EM_F[7]+= wX0 + wX1 + wX2;
                             EM_F[2]+=tmp0_1 + tmp1_1 + tmp4_1;  
                             EM_F[3]+=tmp0_1 + tmp3_1 + tmp4_1;  
                             EM_F[4]+=tmp1_1 + tmp2_1 + tmp5_1;  
                             EM_F[5]+=tmp2_1 + tmp3_1 + tmp5_1;  
                             EM_F[6]+=tmp1_1 + tmp4_1 + tmp5_1;  
                             EM_F[7]+=tmp3_1 + tmp4_1 + tmp5_1;  
5211                          }                          }
5212                          ///////////////                          ///////////////
5213                          // process Y //                          // process Y //
# Line 5305  void Brick::assemblePDESingleReduced(Pas Line 5215  void Brick::assemblePDESingleReduced(Pas
5215                          if (!Y.isEmpty()) {                          if (!Y.isEmpty()) {
5216                              add_EM_F=true;                              add_EM_F=true;
5217                              const double* Y_p=const_cast<escript::Data*>(&Y)->getSampleDataRO(e);                              const double* Y_p=const_cast<escript::Data*>(&Y)->getSampleDataRO(e);
5218                              const double tmp0_1 = Y_p[0]*w25;                              EM_F[0]+=8*Y_p[0]*w18;
5219                              EM_F[0]+=tmp0_1;                              EM_F[1]+=8*Y_p[0]*w18;
5220                              EM_F[1]+=tmp0_1;                              EM_F[2]+=8*Y_p[0]*w18;
5221                              EM_F[2]+=tmp0_1;                              EM_F[3]+=8*Y_p[0]*w18;
5222                              EM_F[3]+=tmp0_1;                              EM_F[4]+=8*Y_p[0]*w18;
5223                              EM_F[4]+=tmp0_1;                              EM_F[5]+=8*Y_p[0]*w18;
5224                              EM_F[5]+=tmp0_1;                              EM_F[6]+=8*Y_p[0]*w18;
5225                              EM_F[6]+=tmp0_1;                              EM_F[7]+=8*Y_p[0]*w18;
                             EM_F[7]+=tmp0_1;  
5226                          }                          }
5227    
5228                          // add to matrix (if add_EM_S) and RHS (if add_EM_F)                          // add to matrix (if add_EM_S) and RHS (if add_EM_F)
# Line 5341  void Brick::assemblePDESystem(Paso_Syste Line 5250  void Brick::assemblePDESystem(Paso_Syste
5250          numComp=mat->logical_col_block_size;          numComp=mat->logical_col_block_size;
5251      }      }
5252    
5253      /* GENERATOR SNIP_PDE_SYSTEM_PRE TOP */      const double SQRT3 = 1.73205080756887719318;
5254      const double w0 = 0.00093037914038584273081*m_dx[1]*m_dx[2]/m_dx[0];      const double w10 = -m_dx[0]/288;
5255      const double w1 = 0.00093037914038584273081*m_dx[2];      const double w12 = w10*(-SQRT3 - 2);
5256      const double w2 = -0.000249294339321148701*m_dx[1];      const double w6 = w10*(SQRT3 - 2);
5257      const double w3 = 0.00093037914038584273081*m_dx[0]*m_dx[2]/m_dx[1];      const double w18 = w10*(-4*SQRT3 - 7);
5258      const double w4 = -0.000249294339321148701*m_dx[0];      const double w4 = w10*(-4*SQRT3 + 7);
5259      const double w5 = 0.00093037914038584273081*m_dx[1];      const double w11 = m_dx[1]/288;
5260      const double w6 = 0.00093037914038584273081*m_dx[0];      const double w15 = w11*(SQRT3 + 2);
5261      const double w7 = -0.000249294339321148701*m_dx[0]*m_dx[1]/m_dx[2];      const double w5 = w11*(-SQRT3 + 2);
5262      const double w8 = 0.0034722222222222222222*m_dx[2];      const double w2 = w11*(4*SQRT3 - 7);
5263      const double w9 = 0.012958509748503046158*m_dx[0]*m_dx[2]/m_dx[1];      const double w17 = w11*(4*SQRT3 + 7);
5264      const double w10 = -0.0034722222222222222222*m_dx[0];      const double w8 = m_dx[2]/288;
5265      const double w11 = 0.0034722222222222222222*m_dx[1];      const double w16 = w8*(SQRT3 + 2);
5266      const double w12 = 0.012958509748503046158*m_dx[0];      const double w1 = w8*(-SQRT3 + 2);
5267      const double w13 = -0.0034722222222222222222*m_dx[0]*m_dx[1]/m_dx[2];      const double w20 = w8*(4*SQRT3 - 7);
5268      const double w14 = 0.012958509748503046158*m_dx[1]*m_dx[2]/m_dx[0];      const double w21 = w8*(-4*SQRT3 - 7);
5269      const double w15 = 0.012958509748503046158*m_dx[1];      const double w54 = -m_dx[0]*m_dx[1]/72;
5270      const double w16 = 0.012958509748503046158*m_dx[2];      const double w68 = -m_dx[0]*m_dx[1]/48;
5271      const double w17 = 0.04836181677178996241*m_dx[1];      const double w38 = w68*(-SQRT3 - 3)/36;
5272      const double w18 = 0.04836181677178996241*m_dx[0];      const double w45 = w68*(SQRT3 - 3)/36;
5273      const double w19 = -0.04836181677178996241*m_dx[0]*m_dx[1]/m_dx[2];      const double w35 = w68*(5*SQRT3 - 9)/36;
5274      const double w20 = -0.000249294339321148701*m_dx[2];      const double w46 = w68*(-5*SQRT3 - 9)/36;
5275      const double w21 = -0.04836181677178996241*m_dx[2];      const double w43 = w68*(-19*SQRT3 - 33)/36;
5276      const double w22 = -0.0034722222222222222222*m_dx[0]*m_dx[2]/m_dx[1];      const double w44 = w68*(19*SQRT3 - 33)/36;
5277      const double w23 = 0.00093037914038584273081*m_dx[0]*m_dx[1]/m_dx[2];      const double w66 = w68*(SQRT3 + 2);
5278      const double w24 = -0.04836181677178996241*m_dx[0]*m_dx[2]/m_dx[1];      const double w70 = w68*(-SQRT3 + 2);
5279      const double w25 = 0.012958509748503046158*m_dx[0]*m_dx[1]/m_dx[2];      const double w56 = -m_dx[0]*m_dx[2]/72;
5280      const double w26 = -0.000249294339321148701*m_dx[0]*m_dx[2]/m_dx[1];      const double w67 = -m_dx[0]*m_dx[2]/48;
5281      const double w27 = -0.0034722222222222222222*m_dx[1]*m_dx[2]/m_dx[0];      const double w37 = w67*(-SQRT3 - 3)/36;
5282      const double w28 = -0.000249294339321148701*m_dx[1]*m_dx[2]/m_dx[0];      const double w40 = w67*(SQRT3 - 3)/36;
5283      const double w29 = -0.04836181677178996241*m_dx[1]*m_dx[2]/m_dx[0];      const double w34 = w67*(5*SQRT3 - 9)/36;
5284      const double w30 = 0.0001966122466178319053*m_dx[1]*m_dx[2];      const double w42 = w67*(-5*SQRT3 - 9)/36;
5285      const double w31 = 0.0001966122466178319053*m_dx[0]*m_dx[2];      const double w47 = w67*(19*SQRT3 + 33)/36;
5286      const double w32 = 0.0001966122466178319053*m_dx[0]*m_dx[1];      const double w48 = w67*(-19*SQRT3 + 33)/36;
5287      const double w33 = 0.0007337668937680108255*m_dx[1]*m_dx[2];      const double w65 = w67*(SQRT3 + 2);
5288      const double w34 = 0.0027384553284542113967*m_dx[0]*m_dx[2];      const double w71 = w67*(-SQRT3 + 2);
5289      const double w35 = 0.0027384553284542113967*m_dx[0]*m_dx[1];      const double w55 = -m_dx[1]*m_dx[2]/72;
5290      const double w36 = 0.0027384553284542113967*m_dx[1]*m_dx[2];      const double w69 = -m_dx[1]*m_dx[2]/48;
5291      const double w37 = 0.0007337668937680108255*m_dx[0]*m_dx[2];      const double w36 = w69*(SQRT3 - 3)/36;
5292      const double w38 = 0.010220054420048834761*m_dx[1]*m_dx[2];      const double w39 = w69*(-SQRT3 - 3)/36;
5293      const double w39 = 0.010220054420048834761*m_dx[0]*m_dx[2];      const double w33 = w69*(5*SQRT3 - 9)/36;
5294      const double w40 = 0.038141762351741127649*m_dx[0]*m_dx[1];      const double w41 = w69*(-5*SQRT3 - 9)/36;
5295      const double w41 = 0.000052682092703316795698*m_dx[0]*m_dx[1];      const double w49 = w69*(19*SQRT3 - 33)/36;
5296      const double w42 = 0.0007337668937680108255*m_dx[0]*m_dx[1];      const double w50 = w69*(-19*SQRT3 - 33)/36;
5297      const double w43 = 0.010220054420048834761*m_dx[0]*m_dx[1];      const double w64 = w69*(SQRT3 + 2);
5298      const double w44 = -0.038141762351741127649*m_dx[0]*m_dx[2];      const double w72 = w69*(-SQRT3 + 2);
5299      const double w45 = -0.000052682092703316795698*m_dx[0]*m_dx[2];      const double w58 = m_dx[0]*m_dx[1]*m_dx[2]/1728;
5300      const double w46 = 0.000052682092703316795698*m_dx[1]*m_dx[2];      const double w60 = w58*(-SQRT3 + 2);
5301      const double w47 = 0.038141762351741127649*m_dx[1]*m_dx[2];      const double w61 = w58*(SQRT3 + 2);
5302      const double w48 = 0.027777777777777777778*m_dx[1]*m_dx[2];      const double w57 = w58*(-4*SQRT3 + 7);
5303      const double w49 = 0.027777777777777777778*m_dx[0]*m_dx[2];      const double w59 = w58*(4*SQRT3 + 7);
5304      const double w50 = 0.055555555555555555556*m_dx[0]*m_dx[1];      const double w62 = w58*(15*SQRT3 + 26);
5305      const double w51 = -0.055555555555555555556*m_dx[0]*m_dx[2];      const double w63 = w58*(-15*SQRT3 + 26);
5306      const double w52 = -0.027777777777777777778*m_dx[0]*m_dx[1];      const double w75 = w58*6*(SQRT3 + 3);
5307      const double w53 = -0.013888888888888888889*m_dx[1]*m_dx[2];      const double w76 = w58*6*(-SQRT3 + 3);
5308      const double w54 = 0.0000415490565535247835*m_dx[0]*m_dx[1]*m_dx[2];      const double w74 = w58*6*(5*SQRT3 + 9);
5309      const double w55 = 0.0005787037037037037037*m_dx[0]*m_dx[1]*m_dx[2];      const double w77 = w58*6*(-5*SQRT3 + 9);
5310      const double w56 = 0.0080603027952983270684*m_dx[0]*m_dx[1]*m_dx[2];      const double w13 = -m_dx[0]*m_dx[1]/(288*m_dx[2]);
5311      const double w57 = 0.0001550631900643071218*m_dx[0]*m_dx[1]*m_dx[2];      const double w19 = w13*(4*SQRT3 + 7);
5312      const double w58 = 0.002159751624750507693*m_dx[0]*m_dx[1]*m_dx[2];      const double w7 = w13*(-4*SQRT3 + 7);
5313      const double w59 = 0.03008145955644280058*m_dx[0]*m_dx[1]*m_dx[2];      const double w23 = w13*(+SQRT3 - 2);
5314      const double w60 = 0.000011133036149792012194*m_dx[0]*m_dx[1]*m_dx[2];      const double w25 = w13*(-SQRT3 - 2);
5315      const double w61 = -0.077751058491018276948*m_dx[1]*m_dx[2];      const double w22 = -m_dx[0]*m_dx[2]/(288*m_dx[1]);
5316      const double w62 = -0.077751058491018276948*m_dx[0]*m_dx[2];      const double w3 = w22*(SQRT3 - 2);
5317      const double w63 = -0.077751058491018276948*m_dx[0]*m_dx[1];      const double w9 = w22*(-SQRT3 - 2);
5318      const double w64 = -0.020833333333333333333*m_dx[0]*m_dx[2];      const double w24 = w22*(4*SQRT3 + 7);
5319      const double w65 = -0.020833333333333333333*m_dx[0]*m_dx[1];      const double w26 = w22*(-4*SQRT3 + 7);
5320      const double w66 = -0.020833333333333333333*m_dx[1]*m_dx[2];      const double w27 = -m_dx[1]*m_dx[2]/(288*m_dx[0]);
5321      const double w67 = -0.0055822748423150563848*m_dx[0]*m_dx[1];      const double w0 = w27*(SQRT3 - 2);
5322      const double w68 = -0.0055822748423150563848*m_dx[0]*m_dx[2];      const double w14 = w27*(-SQRT3 - 2);
5323      const double w69 = -0.0055822748423150563848*m_dx[1]*m_dx[2];      const double w28 = w27*(-4*SQRT3 + 7);
5324      const double w70 = 0.061320326520293008568*m_dx[0]*m_dx[1]*m_dx[2];      const double w29 = w27*(4*SQRT3 + 7);
     const double w71 = 0.01643073197072526838*m_dx[0]*m_dx[1]*m_dx[2];  
     const double w72 = 0.004402601362608064953*m_dx[0]*m_dx[1]*m_dx[2];  
     const double w73 = 0.0011796734797069914318*m_dx[0]*m_dx[1]*m_dx[2];  
     /* GENERATOR SNIP_PDE_SYSTEM_PRE BOTTOM */  
5325    
5326      rhs.requireWrite();      rhs.requireWrite();
5327  #pragma omp parallel  #pragma omp parallel
# Line 5431  void Brick::assemblePDESystem(Paso_Syste Line 5336  void Brick::assemblePDESystem(Paso_Syste
5336                          vector<double> EM_S(8*8*numEq*numComp, 0);                          vector<double> EM_S(8*8*numEq*numComp, 0);
5337                          vector<double> EM_F(8*numEq, 0);                          vector<double> EM_F(8*numEq, 0);
5338                          const index_t e = k0 + m_NE[0]*k1 + m_NE[0]*m_NE[1]*k2;                          const index_t e = k0 + m_NE[0]*k1 + m_NE[0]*m_NE[1]*k2;
                         /* GENERATOR SNIP_PDE_SYSTEM TOP */  
5339                          ///////////////                          ///////////////
5340                          // process A //                          // process A //
5341                          ///////////////                          ///////////////
# Line 6092  void Brick::assemblePDESystem(Paso_Syste Line 5996  void Brick::assemblePDESystem(Paso_Syste
5996                              } else { // constant data                              } else { // constant data
5997                                  for (index_t k=0; k<numEq; k++) {                                  for (index_t k=0; k<numEq; k++) {
5998                                      for (index_t m=0; m<numComp; m++) {                                      for (index_t m=0; m<numComp; m++) {
5999                                          const double A_00 = A_p[INDEX4(k,0,m,0, numEq,3, numComp)];                                          const double Aw00 = 8*A_p[INDEX4(k,0,m,0, numEq,3, numComp)]*w27;
6000                                          const double A_01 = A_p[INDEX4(k,0,m,1, numEq,3, numComp)];                                          const double Aw01 = 12*A_p[INDEX4(k,0,m,1, numEq,3, numComp)]*w8;
6001                                          const double A_02 = A_p[INDEX4(k,0,m,2, numEq,3, numComp)];                                          const double Aw02 = 12*A_p[INDEX4(k,0,m,2, numEq,3, numComp)]*w11;
6002                                          const double A_10 = A_p[INDEX4(k,1,m,0, numEq,3, numComp)];                                          const double Aw10 = 12*A_p[INDEX4(k,1,m,0, numEq,3, numComp)]*w8;
6003                                          const double A_11 = A_p[INDEX4(k,1,m,1, numEq,3, numComp)];                                          const double Aw11 = 8*A_p[INDEX4(k,1,m,1, numEq,3, numComp)]*w22;
6004                                          const double A_12 = A_p[INDEX4(k,1,m,2, numEq,3, numComp)];                                          const double Aw12 = 12*A_p[INDEX4(k,1,m,2, numEq,3, numComp)]*w10;
6005                                          const double A_20 = A_p[INDEX4(k,2,m,0, numEq,3, numComp)];                                          const double Aw20 = 12*A_p[INDEX4(k,2,m,0, numEq,3, numComp)]*w11;
6006                                          const double A_21 = A_p[INDEX4(k,2,m,1, numEq,3, numComp)];                                          const double Aw21 = 12*A_p[INDEX4(k,2,m,1, numEq,3, numComp)]*w10;
6007                                          const double A_22 = A_p[INDEX4(k,2,m,2, numEq,3, numComp)];                                          const double Aw22 = 8*A_p[INDEX4(k,2,m,2, numEq,3, numComp)]*w13;
6008                                          const double tmp0 = 24*w11*(-A_02 + A_20);                                          const double tmp0 = Aw01 + Aw10;
6009                                          const double tmp1 = 24*w10*(A_12 - A_21);                                          const double tmp1 = Aw01 - Aw10;
6010                                          const double tmp2 = 12*w8*(A_01 + A_10);                                          const double tmp2 = Aw02 + Aw20;
6011                                          const double tmp3 = 12*w11*(-A_02 + A_20);                                          const double tmp3 = Aw02 - Aw20;
6012                                          const double tmp4 = 12*w10*(A_12 - A_21);                                          const double tmp4 = Aw12 + Aw21;
6013                                          const double tmp5 = 24*w8*(-A_01 - A_10);                                          const double tmp5 = Aw12 - Aw21;
6014                                          const double tmp6 = 12*w11*(-A_02 - A_20);                                          EM_S[INDEX4(k,m,0,0,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 + 2*tmp2 - 2*tmp4;
6015                                          const double tmp7 = 24*w10*(-A_12 + A_21);                                          EM_S[INDEX4(k,m,0,1,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 - tmp4 + 2*tmp1 + 2*tmp3;
6016                                          const double tmp8 = 24*w8*(A_01 - A_10);                                          EM_S[INDEX4(k,m,0,2,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 - 2*tmp1 + tmp2 - 2*tmp5;
6017                                          const double tmp9 = 24*w11*(A_02 - A_20);                                          EM_S[INDEX4(k,m,0,3,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 - 2*tmp0 + tmp3 - tmp5;
6018                                          const double tmp10 = 12*w10*(A_12 + A_21);                                          EM_S[INDEX4(k,m,0,4,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 - 2*tmp3 + 2*tmp5 + tmp0;
6019                                          const double tmp11 = 24*w8*(-A_01 + A_10);                                          EM_S[INDEX4(k,m,0,5,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 - 2*tmp2 + tmp1 + tmp5;
6020                                          const double tmp12 = 12*w8*(-A_01 - A_10);                                          EM_S[INDEX4(k,m,0,6,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + 2*tmp4 - tmp1 - tmp3;
6021                                          const double tmp13 = 12*w11*(A_02 - A_20);                                          EM_S[INDEX4(k,m,0,7,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp4 - tmp0 - tmp2;
6022                                          const double tmp14 = 24*w8*(A_01 + A_10);                                          EM_S[INDEX4(k,m,1,0,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 - 2*tmp3 - 2*tmp1 - tmp4;
6023                                          const double tmp15 = 12*w11*(A_02 + A_20);                                          EM_S[INDEX4(k,m,1,1,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 - 2*tmp2 - 2*tmp4 - 2*tmp0;
6024                                          const double tmp16 = 12*w10*(-A_12 - A_21);                                          EM_S[INDEX4(k,m,1,2,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + 2*tmp0 - tmp5 - tmp3;
6025                                          const double tmp17 = 12*w10*(-A_12 + A_21);                                          EM_S[INDEX4(k,m,1,3,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 - tmp2 - 2*tmp5 + 2*tmp1;
6026                                          const double tmp18 = 24*w11*(-A_02 - A_20);                                          EM_S[INDEX4(k,m,1,4,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + 2*tmp2 - tmp1 + tmp5;
6027                                          const double tmp19 = 12*w8*(A_01 - A_10);                                          EM_S[INDEX4(k,m,1,5,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp5 - tmp0 + 2*tmp3;
6028                                          const double tmp20 = 24*w10*(A_12 + A_21);                                          EM_S[INDEX4(k,m,1,6,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp4 + tmp2 + tmp0;
6029                                          const double tmp21 = 24*w11*(A_02 + A_20);                                          EM_S[INDEX4(k,m,1,7,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp3 + tmp1 + 2*tmp4;
6030                                          const double tmp22 = 12*w8*(-A_01 + A_10);                                          EM_S[INDEX4(k,m,2,0,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp5 + tmp2 + 2*tmp1;
6031                                          const double tmp23 = 24*w10*(-A_12 - A_21);                                          EM_S[INDEX4(k,m,2,1,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp3 + 2*tmp0 + tmp5;
6032                                          EM_S[INDEX4(k,m,0,0,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp21 + tmp23;                                          EM_S[INDEX4(k,m,2,2,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp4 + 2*tmp2 - 2*tmp0;
6033                                          EM_S[INDEX4(k,m,0,1,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp16 + tmp8 + tmp9;                                          EM_S[INDEX4(k,m,2,3,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + tmp4 - 2*tmp1 + 2*tmp3;
6034                                          EM_S[INDEX4(k,m,0,2,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp11 + tmp15 + tmp7;                                          EM_S[INDEX4(k,m,2,4,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp1 - 2*tmp4 - tmp3;
6035                                          EM_S[INDEX4(k,m,0,3,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp17 + tmp5;                                          EM_S[INDEX4(k,m,2,5,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 - tmp4 + tmp0 - tmp2;
6036                                          EM_S[INDEX4(k,m,0,4,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp1 + tmp2;                                          EM_S[INDEX4(k,m,2,6,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 - 2*tmp3 - tmp0 - 2*tmp5;
6037                                          EM_S[INDEX4(k,m,0,5,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp18 + tmp19 + tmp4;                                          EM_S[INDEX4(k,m,2,7,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 - tmp5 - 2*tmp2 - tmp1;
6038                                          EM_S[INDEX4(k,m,0,6,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp20 + tmp22 + tmp3;                                          EM_S[INDEX4(k,m,3,0,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 - tmp3 + tmp5 - 2*tmp0;
6039                                          EM_S[INDEX4(k,m,0,7,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp12 + tmp6;                                          EM_S[INDEX4(k,m,3,1,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp5 - 2*tmp1 - tmp2;
6040                                          EM_S[INDEX4(k,m,1,0,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp11 + tmp16;                                          EM_S[INDEX4(k,m,3,2,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 - 2*tmp3 + tmp4 + 2*tmp1;
6041                                          EM_S[INDEX4(k,m,1,1,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp18 + tmp23 + tmp5;                                          EM_S[INDEX4(k,m,3,3,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 - 2*tmp2 + 2*tmp4;
6042                                          EM_S[INDEX4(k,m,1,2,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp14 + tmp17 + tmp3;                                          EM_S[INDEX4(k,m,3,4,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 - tmp0 + tmp2 - tmp4;
6043                                          EM_S[INDEX4(k,m,1,3,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp6 + tmp7 + tmp8;                                          EM_S[INDEX4(k,m,3,5,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp3 - tmp1 - 2*tmp4;
6044                                          EM_S[INDEX4(k,m,1,4,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp21 + tmp22 + tmp4;                                          EM_S[INDEX4(k,m,3,6,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 - tmp5 + tmp1 + 2*tmp2;
6045                                          EM_S[INDEX4(k,m,1,5,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp1 + tmp12 + tmp9;                                          EM_S[INDEX4(k,m,3,7,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + tmp0 - 2*tmp5 + 2*tmp3;
6046                                          EM_S[INDEX4(k,m,1,6,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp15 + tmp2;                                          EM_S[INDEX4(k,m,4,0,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + tmp0 - 2*tmp5 + 2*tmp3;
6047                                          EM_S[INDEX4(k,m,1,7,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp19 + tmp20;                                          EM_S[INDEX4(k,m,4,1,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 - tmp5 + tmp1 + 2*tmp2;
6048                                          EM_S[INDEX4(k,m,2,0,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp15 + tmp8;                                          EM_S[INDEX4(k,m,4,2,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp3 - tmp1 - 2*tmp4;
6049                                          EM_S[INDEX4(k,m,2,1,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp14 + tmp4;                                          EM_S[INDEX4(k,m,4,3,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 - tmp0 + tmp2 - tmp4;
6050                                          EM_S[INDEX4(k,m,2,2,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp20 + tmp21 + tmp5;                                          EM_S[INDEX4(k,m,4,4,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 - 2*tmp2 + 2*tmp4;
6051                                          EM_S[INDEX4(k,m,2,3,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp10 + tmp11 + tmp9;                                          EM_S[INDEX4(k,m,4,5,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 - 2*tmp3 + tmp4 + 2*tmp1;
6052                                          EM_S[INDEX4(k,m,2,4,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp19 + tmp23 + tmp3;                                          EM_S[INDEX4(k,m,4,6,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp5 - 2*tmp1 - tmp2;
6053                                          EM_S[INDEX4(k,m,2,5,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp16 + tmp2 + tmp6;                                          EM_S[INDEX4(k,m,4,7,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 - tmp3 + tmp5 - 2*tmp0;
6054                                          EM_S[INDEX4(k,m,2,6,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp12 + tmp7;                                          EM_S[INDEX4(k,m,5,0,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 - tmp5 - 2*tmp2 - tmp1;
6055                                          EM_S[INDEX4(k,m,2,7,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp18 + tmp22;                                          EM_S[INDEX4(k,m,5,1,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 - 2*tmp3 - tmp0 - 2*tmp5;
6056                                          EM_S[INDEX4(k,m,3,0,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp3 + tmp4 + tmp5;                                          EM_S[INDEX4(k,m,5,2,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 - tmp4 + tmp0 - tmp2;
6057                                          EM_S[INDEX4(k,m,3,1,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp11 + tmp6;                                          EM_S[INDEX4(k,m,5,3,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp1 - 2*tmp4 - tmp3;
6058                                          EM_S[INDEX4(k,m,3,2,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp10 + tmp8;                                          EM_S[INDEX4(k,m,5,4,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 + tmp4 - 2*tmp1 + 2*tmp3;
6059                                          EM_S[INDEX4(k,m,3,3,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp18 + tmp20;                                          EM_S[INDEX4(k,m,5,5,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp4 + 2*tmp2 - 2*tmp0;
6060                                          EM_S[INDEX4(k,m,3,4,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp12 + tmp15 + tmp16;                                          EM_S[INDEX4(k,m,5,6,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp3 + 2*tmp0 + tmp5;
6061                                          EM_S[INDEX4(k,m,3,5,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp22 + tmp23;                                          EM_S[INDEX4(k,m,5,7,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 + 2*tmp5 + tmp2 + 2*tmp1;
6062                                          EM_S[INDEX4(k,m,3,6,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp19 + tmp21;                                          EM_S[INDEX4(k,m,6,0,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + tmp3 + tmp1 + 2*tmp4;
6063                                          EM_S[INDEX4(k,m,3,7,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp2 + tmp7 + tmp9;                                          EM_S[INDEX4(k,m,6,1,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp4 + tmp2 + tmp0;
6064                                          EM_S[INDEX4(k,m,4,0,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp2 + tmp7 + tmp9;                                          EM_S[INDEX4(k,m,6,2,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 + 2*tmp5 - tmp0 + 2*tmp3;
6065                                          EM_S[INDEX4(k,m,4,1,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp19 + tmp21;                                          EM_S[INDEX4(k,m,6,3,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 + 2*tmp2 - tmp1 + tmp5;
6066                                          EM_S[INDEX4(k,m,4,2,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp22 + tmp23;                                          EM_S[INDEX4(k,m,6,4,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 - tmp2 - 2*tmp5 + 2*tmp1;
6067                                          EM_S[INDEX4(k,m,4,3,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp12 + tmp15 + tmp16;                                          EM_S[INDEX4(k,m,6,5,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + 2*tmp0 - tmp5 - tmp3;
6068                                          EM_S[INDEX4(k,m,4,4,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp18 + tmp20;                                          EM_S[INDEX4(k,m,6,6,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 - 2*tmp2 - 2*tmp4 - 2*tmp0;
6069                                          EM_S[INDEX4(k,m,4,5,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp10 + tmp8;                                          EM_S[INDEX4(k,m,6,7,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 - 2*tmp3 - 2*tmp1 - tmp4;
6070                                          EM_S[INDEX4(k,m,4,6,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp11 + tmp6;                                          EM_S[INDEX4(k,m,7,0,numEq,numComp,8)]+=   Aw00 +   Aw11 +   Aw22 + tmp4 - tmp0 - tmp2;
6071                                          EM_S[INDEX4(k,m,4,7,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp3 + tmp4 + tmp5;                                          EM_S[INDEX4(k,m,7,1,numEq,numComp,8)]+=  -Aw00 + 2*Aw11 + 2*Aw22 + 2*tmp4 - tmp1 - tmp3;
6072                                          EM_S[INDEX4(k,m,5,0,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp17 + tmp18 + tmp22;                                          EM_S[INDEX4(k,m,7,2,numEq,numComp,8)]+= 2*Aw00 -   Aw11 + 2*Aw22 - 2*tmp2 + tmp1 + tmp5;
6073                                          EM_S[INDEX4(k,m,5,1,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp12 + tmp7;                                          EM_S[INDEX4(k,m,7,3,numEq,numComp,8)]+=-2*Aw00 - 2*Aw11 + 4*Aw22 - 2*tmp3 + 2*tmp5 + tmp0;
6074                                          EM_S[INDEX4(k,m,5,2,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp16 + tmp2 + tmp6;                                          EM_S[INDEX4(k,m,7,4,numEq,numComp,8)]+= 2*Aw00 + 2*Aw11 -   Aw22 + tmp3 - tmp5 - 2*tmp0;
6075                                          EM_S[INDEX4(k,m,5,3,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp19 + tmp23 + tmp3;                                          EM_S[INDEX4(k,m,7,5,numEq,numComp,8)]+=-2*Aw00 + 4*Aw11 - 2*Aw22 - 2*tmp1 + tmp2 - 2*tmp5;
6076                                          EM_S[INDEX4(k,m,5,4,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp10 + tmp11 + tmp9;                                          EM_S[INDEX4(k,m,7,6,numEq,numComp,8)]+= 4*Aw00 - 2*Aw11 - 2*Aw22 - tmp4 + 2*tmp1 + 2*tmp3;
6077                                          EM_S[INDEX4(k,m,5,5,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp20 + tmp21 + tmp5;                                          EM_S[INDEX4(k,m,7,7,numEq,numComp,8)]+=-4*Aw00 - 4*Aw11 - 4*Aw22 + 2*tmp0 + 2*tmp2 - 2*tmp4;
                                         EM_S[INDEX4(k,m,5,6,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp14 + tmp4;  
                                         EM_S[INDEX4(k,m,5,7,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp1 + tmp15 + tmp8;  
                                         EM_S[INDEX4(k,m,6,0,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp13 + tmp19 + tmp20;  
                                         EM_S[INDEX4(k,m,6,1,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp15 + tmp2;  
                                         EM_S[INDEX4(k,m,6,2,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp1 + tmp12 + tmp9;  
                                         EM_S[INDEX4(k,m,6,3,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp21 + tmp22 + tmp4;  
                                         EM_S[INDEX4(k,m,6,4,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp6 + tmp7 + tmp8;  
                                         EM_S[INDEX4(k,m,6,5,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp14 + tmp17 + tmp3;  
                                         EM_S[INDEX4(k,m,6,6,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp18 + tmp23 + tmp5;  
                                         EM_S[INDEX4(k,m,6,7,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp0 + tmp11 + tmp16;  
                                         EM_S[INDEX4(k,m,7,0,numEq,numComp,8)]+=8*A_00*w27 + 8*A_11*w22 + 8*A_22*w13 + tmp10 + tmp12 + tmp6;  
                                         EM_S[INDEX4(k,m,7,1,numEq,numComp,8)]+=-8*A_00*w27 + 16*A_11*w22 + 16*A_22*w13 + tmp20 + tmp22 + tmp3;  
                                         EM_S[INDEX4(k,m,7,2,numEq,numComp,8)]+=16*A_00*w27 - 8*A_11*w22 + 16*A_22*w13 + tmp18 + tmp19 + tmp4;  
                                         EM_S[INDEX4(k,m,7,3,numEq,numComp,8)]+=-16*A_00*w27 - 16*A_11*w22 + 32*A_22*w13 + tmp0 + tmp1 + tmp2;  
                                         EM_S[INDEX4(k,m,7,4,numEq,numComp,8)]+=16*A_00*w27 + 16*A_11*w22 - 8*A_22*w13 + tmp13 + tmp17 + tmp5;  
                                         EM_S[INDEX4(k,m,7,5,numEq,numComp,8)]+=-16*A_00*w27 + 32*A_11*w22 - 16*A_22*w13 + tmp11 + tmp15 + tmp7;  
                                         EM_S[INDEX4(k,m,7,6,numEq,numComp,8)]+=32*A_00*w27 - 16*A_11*w22 - 16*A_22*w13 + tmp16 + tmp8 + tmp9;  
                                         EM_S[INDEX4(k,m,7,7,numEq,numComp,8)]+=-32*A_00*w27 - 32*A_11*w22 - 32*A_22*w13 + tmp14 + tmp21 + tmp23;  
6078                                      }                                      }
6079                                  }                                  }
6080                              }                              }
# Line 6226  void Brick::assemblePDESystem(Paso_Syste Line 6112  void Brick::assemblePDESystem(Paso_Syste
6112                                          const double B_0_7 = B_p[INDEX4(k,0,m,7, numEq,3,numComp)];                                          const double B_0_7 = B_p[INDEX4(k,0,m,7, numEq,3,numComp)];
6113                                          const double B_1_7 = B_p[INDEX4(k,1,m,7, numEq,3,numComp)];                                          const double B_1_7 = B_p[INDEX4(k,1,m,7, numEq,3,numComp)];
6114                                          const double B_2_7 = B_p[INDEX4(k,2,m,7, numEq,3,numComp)];                                          const double B_2_7 = B_p[INDEX4(k,2,m,7, numEq,3,numComp)];
6115                                          const double tmp0 = w38*(B_0_3 + B_0_7);                                          const double tmp0 = w38*(B_2_1 + B_2_2);
6116                                          const double tmp1 = w31*(B_1_0 + B_1_4);                                          const double tmp1 = w42*(B_1_3 + B_1_7);
6117                                          const double tmp2 = w42*(B_2_5 + B_2_6);                                          const double tmp2 = w41*(B_0_3 + B_0_7);
6118                                          const double tmp3 = w35*(B_2_1 + B_2_2);                                          const double tmp3 = w37*(B_1_1 + B_1_5);
6119                                          const double tmp4 = w37*(B_1_2 + B_1_6);                                          const double tmp4 = w39*(B_0_2 + B_0_6);
6120                                          const double tmp5 = w39*(B_1_3 + B_1_7);                                          const double tmp5 = w45*(B_2_5 + B_2_6);
6121                                          const double tmp6 = w36*(B_0_2 + B_0_6);                                          const double tmp6 = w36*(B_0_1 + B_0_5);
6122                                          const double tmp7 = w33*(B_0_1 + B_0_5);                                          const double tmp7 = w40*(B_1_2 + B_1_6);
6123                                          const double tmp8 = w30*(B_0_0 + B_0_4);                                          const double tmp8 = w33*(B_0_0 + B_0_4);
6124                                          const double tmp9 = w34*(B_1_1 + B_1_5);                                          const double tmp9 = w34*(B_1_0 + B_1_4);
6125                                          const double tmp10 = w38*(-B_0_5 - B_0_7);                                          const double tmp10 = w38*(B_2_4 + B_2_5 + B_2_6 + B_2_7);
6126                                          const double tmp11 = w31*(-B_1_0 - B_1_1);                                          const double tmp11 = w42*(-B_1_6 - B_1_7);
6127                                          const double tmp12 = w42*(B_2_0 + B_2_1 + B_2_2 + B_2_3);                                          const double tmp12 = w41*(-B_0_5 - B_0_7);
6128                                          const double tmp13 = w35*(B_2_4 + B_2_5 + B_2_6 + B_2_7);                                          const double tmp13 = w37*(-B_1_4 - B_1_5);
6129                                          const double tmp14 = w37*(-B_1_2 - B_1_3);                                          const double tmp14 = w39*(-B_0_4 - B_0_6);
6130                                          const double tmp15 = w39*(-B_1_6 - B_1_7);                                          const double tmp15 = w45*(B_2_0 + B_2_1 + B_2_2 + B_2_3);
6131                                          const double tmp16 = w36*(-B_0_4 - B_0_6);                                          const double tmp16 = w36*(-B_0_1 - B_0_3);
6132                                          const double tmp17 = w33*(-B_0_1 - B_0_3);                                          const double tmp17 = w40*(-B_1_2 - B_1_3);
6133                                          const double tmp18 = w30*(-B_0_0 - B_0_2);                                          const double tmp18 = w33*(-B_0_0 - B_0_2);
6134                                          const double tmp19 = w34*(-B_1_4 - B_1_5);                                          const double tmp19 = w34*(-B_1_0 - B_1_1);
6135                                          const double tmp20 = w38*(B_0_1 + B_0_3);                                          const double tmp20 = w38*(-B_2_5 - B_2_7);
6136                                          const double tmp21 = w42*(-B_2_0 - B_2_2);                                          const double tmp21 = w35*(-B_2_4 - B_2_6);
6137                                          const double tmp22 = w35*(-B_2_5 - B_2_7);                                          const double tmp22 = w41*(B_0_1 + B_0_3);
6138                                          const double tmp23 = w37*(-B_1_0 - B_1_5);                                          const double tmp23 = w37*(-B_1_2 - B_1_7);
6139                                          const double tmp24 = w32*(-B_2_4 - B_2_6);                                          const double tmp24 = w39*(B_0_0 + B_0_2);
6140                                          const double tmp25 = w36*(B_0_0 + B_0_2);                                          const double tmp25 = w45*(-B_2_0 - B_2_2);
6141                                          const double tmp26 = w33*(B_0_5 + B_0_7);                                          const double tmp26 = w36*(B_0_5 + B_0_7);
6142                                          const double tmp27 = w30*(B_0_4 + B_0_6);                                          const double tmp27 = w40*(-B_1_0 - B_1_5);
6143                                          const double tmp28 = w43*(-B_2_1 - B_2_3);                                          const double tmp28 = w33*(B_0_4 + B_0_6);
6144                                          const double tmp29 = w34*(-B_1_2 - B_1_7);                                          const double tmp29 = w46*(-B_2_1 - B_2_3);
6145                                          const double tmp30 = w38*(-B_0_4 - B_0_6);                                          const double tmp30 = w38*(B_2_0 + B_2_2);
6146                                          const double tmp31 = w42*(B_2_5 + B_2_7);                                          const double tmp31 = w35*(B_2_1 + B_2_3);
6147                                          const double tmp32 = w35*(B_2_0 + B_2_2);                                          const double tmp32 = w41*(-B_0_4 - B_0_6);
6148                                          const double tmp33 = w37*(B_1_2 + B_1_7);                                          const double tmp33 = w37*(B_1_0 + B_1_5);
6149                                          const double tmp34 = w32*(B_2_1 + B_2_3);                                          const double tmp34 = w39*(-B_0_5 - B_0_7);
6150                                          const double tmp35 = w36*(-B_0_5 - B_0_7);                                          const double tmp35 = w45*(B_2_5 + B_2_7);
6151                                          const double tmp36 = w33*(-B_0_0 - B_0_2);                                          const double tmp36 = w36*(-B_0_0 - B_0_2);
6152                                          const double tmp37 = w30*(-B_0_1 - B_0_3);                                          const double tmp37 = w40*(B_1_2 + B_1_7);
6153                                          const double tmp38 = w43*(B_2_4 + B_2_6);                                          const double tmp38 = w33*(-B_0_1 - B_0_3);
6154                                          const double tmp39 = w34*(B_1_0 + B_1_5);                                          const double tmp39 = w46*(B_2_4 + B_2_6);
6155                                          const double tmp40 = w38*(B_0_0 + B_0_2);                                          const double tmp40 = w38*(-B_2_0 - B_2_1 - B_2_2 - B_2_3);
6156                                          const double tmp41 = w31*(B_1_6 + B_1_7);                                          const double tmp41 = w42*(B_1_0 + B_1_1);
6157                                          const double tmp42 = w42*(-B_2_4 - B_2_5 - B_2_6 - B_2_7);                                          const double tmp42 = w41*(B_0_0 + B_0_2);
6158                                          const double tmp43 = w35*(-B_2_0 - B_2_1 - B_2_2 - B_2_3);                                          const double tmp43 = w37*(B_1_2 + B_1_3);
6159                                          const double tmp44 = w37*(B_1_4 + B_1_5);                                          const double tmp44 = w39*(B_0_1 + B_0_3);
6160                                          const double tmp45 = w39*(B_1_0 + B_1_1);                                          const double tmp45 = w45*(-B_2_4 - B_2_5 - B_2_6 - B_2_7);
6161                                          const double tmp46 = w36*(B_0_1 + B_0_3);                                          const double tmp46 = w36*(B_0_4 + B_0_6);
6162                                          const double tmp47 = w33*(B_0_4 + B_0_6);                                          const double tmp47 = w40*(B_1_4 + B_1_5);
6163                                          const double tmp48 = w30*(B_0_5 + B_0_7);                                          const double tmp48 = w33*(B_0_5 + B_0_7);
6164                                          const double tmp49 = w34*(B_1_2 + B_1_3);                                          const double tmp49 = w34*(B_1_6 + B_1_7);
6165                                          const double tmp50 = w31*(-B_1_2 - B_1_3);                                          const double tmp50 = w38*(B_2_0 + B_2_1);
6166                                          const double tmp51 = w42*(B_2_6 + B_2_7);                                          const double tmp51 = w42*(-B_1_4 - B_1_5);
6167                                          const double tmp52 = w35*(B_2_0 + B_2_1);                                          const double tmp52 = w35*(B_2_2 + B_2_3);
6168                                          const double tmp53 = w37*(-B_1_0 - B_1_1);                                          const double tmp53 = w37*(-B_1_6 - B_1_7);
6169                                          const double tmp54 = w32*(B_2_2 + B_2_3);                                          const double tmp54 = w39*(B_0_0 + B_0_6);
6170                                          const double tmp55 = w39*(-B_1_4 - B_1_5);                                          const double tmp55 = w45*(B_2_6 + B_2_7);
6171                                          const double tmp56 = w36*(B_0_0 + B_0_6);                                          const double tmp56 = w36*(B_0_1 + B_0_7);
6172                                          const double tmp57 = w33*(B_0_1 + B_0_7);                                          const double tmp57 = w40*(-B_1_0 - B_1_1);
6173                                          const double tmp58 = w43*(B_2_4 + B_2_5);                                          const double tmp58 = w46*(B_2_4 + B_2_5);
6174                                          const double tmp59 = w34*(-B_1_6 - B_1_7);                                          const double tmp59 = w34*(-B_1_2 - B_1_3);
6175                                          const double tmp60 = w42*(-B_2_0 - B_2_1 - B_2_2 - B_2_3);                                          const double tmp60 = w38*(-B_2_4 - B_2_5 - B_2_6 - B_2_7);
6176                                          const double tmp61 = w35*(-B_2_4 - B_2_5 - B_2_6 - B_2_7);                                          const double tmp61 = w37*(-B_1_2 - B_1_3 - B_1_6 - B_1_7);
6177                                          const double tmp62 = w37*(-B_1_0 - B_1_1 - B_1_4 - B_1_5);                                          const double tmp62 = w39*(-B_0_1 - B_0_3 - B_0_5 - B_0_7);
6178                                          const double tmp63 = w36*(-B_0_1 - B_0_3 - B_0_5 - B_0_7);                                          const double tmp63 = w45*(-B_2_0 - B_2_1 - B_2_2 - B_2_3);
6179                                          const double tmp64 = w33*(-B_0_0 - B_0_2 - B_0_4 - B_0_6);                                          const double tmp64 = w36*(-B_0_0 - B_0_2 - B_0_4 - B_0_6);
6180                                          const double tmp65 = w34*(-B_1_2 - B_1_3 - B_1_6 - B_1_7);                                          const double tmp65 = w40*(-B_1_0 - B_1_1 - B_1_4 - B_1_5);
6181                                          const double tmp66 = w38*(B_0_4 + B_0_6);                                          const double tmp66 = w41*(B_0_4 + B_0_6);
6182                                          const double tmp67 = w36*(B_0_5 + B_0_7);                                          const double tmp67 = w39*(B_0_5 + B_0_7);
6183                                          const double tmp68 = w33*(B_0_0 + B_0_2);                                          const double tmp68 = w36*(B_0_0 + B_0_2);
6184                                          const double tmp69 = w30*(B_0_1 + B_0_3);                                          const double tmp69 = w33*(B_0_1 + B_0_3);
6185                                          const double tmp70 = w38*(-B_0_2 - B_0_6);                                          const double tmp70 = w38*(-B_2_4 - B_2_7);
6186                                          const double tmp71 = w31*(B_1_1 + B_1_5);                                          const double tmp71 = w42*(B_1_2 + B_1_6);
6187                                          const double tmp72 = w42*(-B_2_0 - B_2_3);                                          const double tmp72 = w41*(-B_0_2 - B_0_6);
6188                                          const double tmp73 = w35*(-B_2_4 - B_2_7);                                          const double tmp73 = w37*(B_1_0 + B_1_4);
6189                                          const double tmp74 = w37*(B_1_3 + B_1_7);                                          const double tmp74 = w39*(-B_0_3 - B_0_7);
6190                                          const double tmp75 = w39*(B_1_2 + B_1_6);                                          const double tmp75 = w45*(-B_2_0 - B_2_3);
6191                                          const double tmp76 = w36*(-B_0_3 - B_0_7);                                          const double tmp76 = w36*(-B_0_0 - B_0_4);
6192                                          const double tmp77 = w33*(-B_0_0 - B_0_4);                                          const double tmp77 = w40*(B_1_3 + B_1_7);
6193                                          const double tmp78 = w30*(-B_0_1 - B_0_5);                                          const double tmp78 = w33*(-B_0_1 - B_0_5);
6194                                          const double tmp79 = w34*(B_1_0 + B_1_4);                                          const double tmp79 = w34*(B_1_1 + B_1_5);
6195                                          const double tmp80 = w36*(B_0_0 + B_0_2 + B_0_4 + B_0_6);                                          const double tmp80 = w39*(B_0_0 + B_0_2 + B_0_4 + B_0_6);
6196                                          const double tmp81 = w33*(B_0_1 + B_0_3 + B_0_5 + B_0_7);                                          const double tmp81 = w36*(B_0_1 + B_0_3 + B_0_5 + B_0_7);
6197                                          const double tmp82 = w38*(B_0_1 + B_0_5);                                          const double tmp82 = w38*(B_2_0 + B_2_3);
6198                                          const double tmp83 = w31*(-B_1_2 - B_1_6);                                          const double tmp83 = w42*(-B_1_1 - B_1_5);
6199                                          const double tmp84 = w42*(B_2_4 + B_2_7);                                          const double tmp84 = w41*(B_0_1 + B_0_5);
6200                                          const double tmp85 = w35*(B_2_0 + B_2_3);                                          const double tmp85 = w37*(-B_1_3 - B_1_7);
6201                                          const double tmp86 = w37*(-B_1_0 - B_1_4);                                          const double tmp86 = w39*(B_0_0 + B_0_4);
6202                                          const double tmp87 = w39*(-B_1_1 - B_1_5);                                          const double tmp87 = w45*(B_2_4 + B_2_7);
6203                                          const double tmp88 = w36*(B_0_0 + B_0_4);                                          const double tmp88 = w36*(B_0_3 + B_0_7);
6204                                          const double tmp89 = w33*(B_0_3 + B_0_7);                                          const double tmp89 = w40*(-B_1_0 - B_1_4);
6205                                          const double tmp90 = w30*(B_0_2 + B_0_6);                                          const double tmp90 = w33*(B_0_2 + B_0_6);
6206                                          const double tmp91 = w34*(-B_1_3 - B_1_7);                                          const double tmp91 = w34*(-B_1_2 - B_1_6);
6207                                          const double tmp92 = w42*(-B_2_1 - B_2_2);                                          const double tmp92 = w38*(-B_2_5 - B_2_6);
6208                                          const double tmp93 = w35*(-B_2_5 - B_2_6);                                          const double tmp93 = w45*(-B_2_1 - B_2_2);
6209                                          const double tmp94 = w37*(B_1_2 + B_1_3 + B_1_6 + B_1_7);                                          const double tmp94 = w37*(B_1_0 + B_1_1 + B_1_4 + B_1_5);
6210                                          const double tmp95 = w34*(B_1_0 + B_1_1 + B_1_4 + B_1_5);                                          const double tmp95 = w40*(B_1_2 + B_1_3 + B_1_6 + B_1_7);
6211                                          const double tmp96 = w38*(-B_0_1 - B_0_3);                                          const double tmp96 = w42*(-B_1_2 - B_1_3);
6212                                          const double tmp97 = w31*(-B_1_4 - B_1_5);                                          const double tmp97 = w41*(-B_0_1 - B_0_3);
6213                                          const double tmp98 = w37*(-B_1_6 - B_1_7);                                          const double tmp98 = w37*(-B_1_0 - B_1_1);
6214                                          const double tmp99 = w39*(-B_1_2 - B_1_3);                                          const double tmp99 = w39*(-B_0_0 - B_0_2);
6215                                          const double tmp100 = w36*(-B_0_0 - B_0_2);                                          const double tmp100 = w36*(-B_0_5 - B_0_7);
6216                                          const double tmp101 = w33*(-B_0_5 - B_0_7);                                          const double tmp101 = w40*(-B_1_6 - B_1_7);
6217                                          const double tmp102 = w30*(-B_0_4 - B_0_6);                                          const double tmp102 = w33*(-B_0_4 - B_0_6);
6218                                          const double tmp103 = w34*(-B_1_0 - B_1_1);                                          const double tmp103 = w34*(-B_1_4 - B_1_5);
6219                                          const double tmp104 = w38*(B_0_2 + B_0_6);                                          const double tmp104 = w38*(B_2_6 + B_2_7);
6220                                          const double tmp105 = w42*(B_2_0 + B_2_1);                                          const double tmp105 = w35*(B_2_4 + B_2_5);
6221                                          const double tmp106 = w35*(B_2_6 + B_2_7);                                          const double tmp106 = w41*(B_0_2 + B_0_6);
6222                                          const double tmp107 = w37*(B_1_0 + B_1_1 + B_1_4 + B_1_5);                                          const double tmp107 = w37*(B_1_2 + B_1_3 + B_1_6 + B_1_7);
6223                                          const double tmp108 = w32*(B_2_4 + B_2_5);                                          const double tmp108 = w39*(B_0_3 + B_0_7);
6224                                          const double tmp109 = w36*(B_0_3 + B_0_7);                                          const double tmp109 = w45*(B_2_0 + B_2_1);
6225                                          const double tmp110 = w33*(B_0_0 + B_0_4);                                          const double tmp110 = w36*(B_0_0 + B_0_4);
6226                                          const double tmp111 = w30*(B_0_1 + B_0_5);                                          const double tmp111 = w40*(B_1_0 + B_1_1 + B_1_4 + B_1_5);
6227                                          const double tmp112 = w43*(B_2_2 + B_2_3);                                          const double tmp112 = w33*(B_0_1 + B_0_5);
6228                                          const double tmp113 = w34*(B_1_2 + B_1_3 + B_1_6 + B_1_7);                                          const double tmp113 = w46*(B_2_2 + B_2_3);
6229                                          const double tmp114 = w38*(-B_0_0 - B_0_4);                                          const double tmp114 = w42*(-B_1_0 - B_1_4);
6230                                          const double tmp115 = w31*(-B_1_3 - B_1_7);                                          const double tmp115 = w41*(-B_0_0 - B_0_4);
6231                                          const double tmp116 = w37*(-B_1_1 - B_1_5);                                          const double tmp116 = w37*(-B_1_2 - B_1_6);
6232                                          const double tmp117 = w39*(-B_1_0 - B_1_4);                                          const double tmp117 = w39*(-B_0_1 - B_0_5);
6233                                          const double tmp118 = w36*(-B_0_1 - B_0_5);                                          const double tmp118 = w36*(-B_0_2 - B_0_6);
6234                                          const double tmp119 = w33*(-B_0_2 - B_0_6);                                          const double tmp119 = w40*(-B_1_1 - B_1_5);
6235                                          const double tmp120 = w30*(-B_0_3 - B_0_7);                                          const double tmp120 = w33*(-B_0_3 - B_0_7);
6236                                          const double tmp121 = w34*(-B_1_2 - B_1_6);                                          const double tmp121 = w34*(-B_1_3 - B_1_7);
6237                                          const double tmp122 = w31*(B_1_0 + B_1_1);                                          const double tmp122 = w38*(B_2_2 + B_2_3);
6238                                          const double tmp123 = w42*(B_2_4 + B_2_5);                                          const double tmp123 = w42*(B_1_6 + B_1_7);
6239                                          const double tmp124 = w35*(B_2_2 + B_2_3);                                          const double tmp124 = w35*(B_2_0 + B_2_1);
6240                                          const double tmp125 = w37*(B_1_2 + B_1_3);                                          const double tmp125 = w37*(B_1_4 + B_1_5);
6241                                          const double tmp126 = w32*(B_2_0 + B_2_1);                                          const double tmp126 = w39*(-B_0_3 - B_0_5);
6242                                          const double tmp127 = w39*(B_1_6 + B_1_7);                                          const double tmp127 = w45*(B_2_4 + B_2_5);
6243                                          const double tmp128 = w36*(-B_0_3 - B_0_5);                                          const double tmp128 = w36*(-B_0_2 - B_0_4);
6244                                          const double tmp129 = w33*(-B_0_2 - B_0_4);                                          const double tmp129 = w40*(B_1_2 + B_1_3);
6245                                          const double tmp130 = w43*(B_2_6 + B_2_7);                                          const double tmp130 = w46*(B_2_6 + B_2_7);
6246                                          const double tmp131 = w34*(B_1_4 + B_1_5);                                          const double tmp131 = w34*(B_1_0 + B_1_1);
6247                                          const double tmp132 = w42*(-B_2_5 - B_2_6);                                          const double tmp132 = w38*(-B_2_1 - B_2_2);
6248                                          const double tmp133 = w35*(-B_2_1 - B_2_2);                                          const double tmp133 = w37*(B_1_2 + B_1_7);
6249                                          const double tmp134 = w37*(B_1_0 + B_1_5);                                          const double tmp134 = w39*(B_0_1 + B_0_7);
6250                                          const double tmp135 = w36*(B_0_1 + B_0_7);                                          const double tmp135 = w36*(B_0_0 + B_0_6);
6251                                          const double tmp136 = w33*(B_0_0 + B_0_6);                                          const double tmp136 = w40*(B_1_0 + B_1_5);
6252                                          const double tmp137 = w34*(B_1_2 + B_1_7);                                          const double tmp137 = w45*(-B_2_5 - B_2_6);
6253                                          const double tmp138 = w38*(-B_0_0 - B_0_2);                                          const double tmp138 = w38*(-B_2_4 - B_2_6);
6254                                          const double tmp139 = w42*(-B_2_1 - B_2_3);                                          const double tmp139 = w35*(-B_2_5 - B_2_7);
6255                                          const double tmp140 = w35*(-B_2_4 - B_2_6);                                          const double tmp140 = w41*(-B_0_0 - B_0_2);
6256                                          const double tmp141 = w37*(B_1_3 + B_1_6);                                          const double tmp141 = w37*(B_1_1 + B_1_4);
6257                                          const double tmp142 = w32*(-B_2_5 - B_2_7);                                          const double tmp142 = w39*(-B_0_1 - B_0_3);
6258                                          const double tmp143 = w36*(-B_0_1 - B_0_3);                                          const double tmp143 = w45*(-B_2_1 - B_2_3);
6259                                          const double tmp144 = w33*(-B_0_4 - B_0_6);                                          const double tmp144 = w36*(-B_0_4 - B_0_6);
6260                                          const double tmp145 = w30*(-B_0_5 - B_0_7);                                          const double tmp145 = w40*(B_1_3 + B_1_6);
6261                                          const double tmp146 = w43*(-B_2_0 - B_2_2);                                          const double tmp146 = w33*(-B_0_5 - B_0_7);
6262                                          const double tmp147 = w34*(B_1_1 + B_1_4);                                          const double tmp147 = w46*(-B_2_0 - B_2_2);
6263                                          const double tmp148 = w36*(B_0_2 + B_0_4);                                          const double tmp148 = w39*(B_0_2 + B_0_4);
6264                                          const double tmp149 = w33*(B_0_3 + B_0_5);                                          const double tmp149 = w36*(B_0_3 + B_0_5);
6265                                          const double tmp150 = w42*(B_2_1 + B_2_2);                                          const double tmp150 = w38*(B_2_5 + B_2_6);
6266                                          const double tmp151 = w35*(B_2_5 + B_2_6);                                          const double tmp151 = w37*(-B_1_0 - B_1_5);
6267                                          const double tmp152 = w37*(-B_1_2 - B_1_7);                                          const double tmp152 = w39*(-B_0_0 - B_0_6);
6268                                          const double tmp153 = w36*(-B_0_0 - B_0_6);                                          const double tmp153 = w45*(B_2_1 + B_2_2);
6269                                          const double tmp154 = w33*(-B_0_1 - B_0_7);                                          const double tmp154 = w36*(-B_0_1 - B_0_7);
6270                                          const double tmp155 = w34*(-B_1_0 - B_1_5);                                          const double tmp155 = w40*(-B_1_2 - B_1_7);
6271                                          const double tmp156 = w38*(-B_0_3 - B_0_7);                                          const double tmp156 = w41*(-B_0_3 - B_0_7);
6272                                          const double tmp157 = w36*(-B_0_2 - B_0_6);                                          const double tmp157 = w39*(-B_0_2 - B_0_6);
6273                                          const double tmp158 = w33*(-B_0_1 - B_0_5);                                          const double tmp158 = w36*(-B_0_1 - B_0_5);
6274                                          const double tmp159 = w30*(-B_0_0 - B_0_4);                                          const double tmp159 = w33*(-B_0_0 - B_0_4);
6275                                          const double tmp160 = w42*(-B_2_4 - B_2_5);                                          const double tmp160 = w38*(-B_2_2 - B_2_3);
6276                                          const double tmp161 = w35*(-B_2_2 - B_2_3);                                          const double tmp161 = w35*(-B_2_0 - B_2_1);
6277                                          const double tmp162 = w32*(-B_2_0 - B_2_1);                                          const double tmp162 = w45*(-B_2_4 - B_2_5);
6278                                          const double tmp163 = w43*(-B_2_6 - B_2_7);                                          const double tmp163 = w46*(-B_2_6 - B_2_7);
6279                                          const double tmp164 = w42*(-B_2_4 - B_2_7);                                          const double tmp164 = w38*(-B_2_0 - B_2_3);
6280                                          const double tmp165 = w35*(-B_2_0 - B_2_3);                                          const double tmp165 = w37*(B_1_3 + B_1_6);
6281                                          const double tmp166 = w37*(B_1_1 + B_1_4);                                          const double tmp166 = w40*(B_1_1 + B_1_4);
6282                                          const double tmp167 = w34*(B_1_3 + B_1_6);                                          const double tmp167 = w45*(-B_2_4 - B_2_7);
6283                                          const double tmp168 = w36*(B_0_3 + B_0_5);                                          const double tmp168 = w39*(B_0_3 + B_0_5);
6284                                          const double tmp169 = w33*(B_0_2 + B_0_4);                                          const double tmp169 = w36*(B_0_2 + B_0_4);
6285                                          const double tmp170 = w38*(B_0_5 + B_0_7);                                          const double tmp170 = w38*(B_2_1 + B_2_3);
6286                                          const double tmp171 = w42*(B_2_4 + B_2_6);                                          const double tmp171 = w35*(B_2_0 + B_2_2);
6287                                          const double tmp172 = w35*(B_2_1 + B_2_3);                                          const double tmp172 = w41*(B_0_5 + B_0_7);
6288                                          const double tmp173 = w37*(-B_1_1 - B_1_4);                                          const double tmp173 = w37*(-B_1_3 - B_1_6);
6289                                          const double tmp174 = w32*(B_2_0 + B_2_2);                                          const double tmp174 = w39*(B_0_4 + B_0_6);
6290                                          const double tmp175 = w36*(B_0_4 + B_0_6);                                          const double tmp175 = w45*(B_2_4 + B_2_6);
6291                                          const double tmp176 = w33*(B_0_1 + B_0_3);                                          const double tmp176 = w36*(B_0_1 + B_0_3);
6292                                          const double tmp177 = w30*(B_0_0 + B_0_2);                                          const double tmp177 = w40*(-B_1_1 - B_1_4);
6293                                          const double tmp178 = w43*(B_2_5 + B_2_7);                                          const double tmp178 = w33*(B_0_0 + B_0_2);
6294                                          const double tmp179 = w34*(-B_1_3 - B_1_6);                                          const double tmp179 = w46*(B_2_5 + B_2_7);
6295                                          const double tmp180 = w31*(-B_1_0 - B_1_4);                                          const double tmp180 = w38*(B_2_5 + B_2_7);
6296                                          const double tmp181 = w42*(B_2_0 + B_2_2);                                          const double tmp181 = w42*(-B_1_3 - B_1_7);
6297                                          const double tmp182 = w35*(B_2_5 + B_2_7);                                          const double tmp182 = w35*(B_2_4 + B_2_6);
6298                                          const double tmp183 = w37*(-B_1_2 - B_1_6);                                          const double tmp183 = w37*(-B_1_1 - B_1_5);
6299                                          const double tmp184 = w32*(B_2_4 + B_2_6);                                          const double tmp184 = w39*(B_0_1 + B_0_3 + B_0_5 + B_0_7);
6300                                          const double tmp185 = w39*(-B_1_3 - B_1_7);                                          const double tmp185 = w45*(B_2_0 + B_2_2);
6301                                          const double tmp186 = w36*(B_0_1 + B_0_3 + B_0_5 + B_0_7);                                          const double tmp186 = w36*(B_0_0 + B_0_2 + B_0_4 + B_0_6);
6302                                          const double tmp187 = w33*(B_0_0 + B_0_2 + B_0_4 + B_0_6);                                          const double tmp187 = w40*(-B_1_2 - B_1_6);
6303                                          const double tmp188 = w43*(B_2_1 + B_2_3);                                          const double tmp188 = w46*(B_2_1 + B_2_3);
6304                                          const double tmp189 = w34*(-B_1_1 - B_1_5);                                          const double tmp189 = w34*(-B_1_0 - B_1_4);
6305                                          const double tmp190 = w38*(-B_0_1 - B_0_5);                                          const double tmp190 = w38*(B_2_4 + B_2_5);
6306                                          const double tmp191 = w42*(B_2_2 + B_2_3);                                          const double tmp191 = w35*(B_2_6 + B_2_7);
6307                                          const double tmp192 = w35*(B_2_4 + B_2_5);                                          const double tmp192 = w41*(-B_0_1 - B_0_5);
6308                                          const double tmp193 = w37*(-B_1_2 - B_1_3 - B_1_6 - B_1_7);                                          const double tmp193 = w37*(-B_1_0 - B_1_1 - B_1_4 - B_1_5);
6309                                          const double tmp194 = w32*(B_2_6 + B_2_7);                                          const double tmp194 = w39*(-B_0_0 - B_0_4);
6310                                          const double tmp195 = w36*(-B_0_0 - B_0_4);                                          const double tmp195 = w45*(B_2_2 + B_2_3);
6311                                          const double tmp196 = w33*(-B_0_3 - B_0_7);                                          const double tmp196 = w36*(-B_0_3 - B_0_7);
6312                                          const double tmp197 = w30*(-B_0_2 - B_0_6);                                          const double tmp197 = w40*(-B_1_2 - B_1_3 - B_1_6 - B_1_7);
6313                                          const double tmp198 = w43*(B_2_0 + B_2_1);                                          const double tmp198 = w33*(-B_0_2 - B_0_6);
6314                                          const double tmp199 = w34*(-B_1_0 - B_1_1 - B_1_4 - B_1_5);                                          const double tmp199 = w46*(B_2_0 + B_2_1);
6315                                          const double tmp200 = w31*(B_1_4 + B_1_5);                                          const double tmp200 = w38*(-B_2_6 - B_2_7);
6316                                          const double tmp201 = w42*(-B_2_0 - B_2_1);                                          const double tmp201 = w42*(B_1_2 + B_1_3);
6317                                          const double tmp202 = w35*(-B_2_6 - B_2_7);                                          const double tmp202 = w35*(-B_2_4 - B_2_5);
6318                                          const double tmp203 = w37*(B_1_6 + B_1_7);                                          const double tmp203 = w37*(B_1_0 + B_1_1);
6319                                          const double tmp204 = w32*(-B_2_4 - B_2_5);                                          const double tmp204 = w45*(-B_2_0 - B_2_1);
6320                                          const double tmp205 = w39*(B_1_2 + B_1_3);                                          const double tmp205 = w40*(B_1_6 + B_1_7);
6321                                          const double tmp206 = w43*(-B_2_2 - B_2_3);                                          const double tmp206 = w46*(-B_2_2 - B_2_3);
6322                                          const double tmp207 = w34*(B_1_0 + B_1_1);                                          const double tmp207 = w34*(B_1_4 + B_1_5);
6323                                          const double tmp208 = w37*(-B_1_3 - B_1_6);                                          const double tmp208 = w37*(-B_1_1 - B_1_4);
6324                                          const double tmp209 = w36*(-B_0_2 - B_0_4);                                          const double tmp209 = w39*(-B_0_2 - B_0_4);
6325                                          const double tmp210 = w33*(-B_0_3 - B_0_5);                                          const double tmp210 = w36*(-B_0_3 - B_0_5);
6326                                          const double tmp211 = w34*(-B_1_1 - B_1_4);                                          const double tmp211 = w40*(-B_1_3 - B_1_6);
6327                                          const double tmp212 = w42*(B_2_0 + B_2_3);                                          const double tmp212 = w38*(B_2_4 + B_2_7);
6328                                          const double tmp213 = w35*(B_2_4 + B_2_7);                                          const double tmp213 = w45*(B_2_0 + B_2_3);
6329                                          const double tmp214 = w38*(B_0_0 + B_0_4);                                          const double tmp214 = w41*(B_0_0 + B_0_4);
6330                                          const double tmp215 = w36*(B_0_1 + B_0_5);                                          const double tmp215 = w39*(B_0_1 + B_0_5);
6331                                          const double tmp216 = w33*(B_0_2 + B_0_6);                                          const double tmp216 = w36*(B_0_2 + B_0_6);
6332                                          const double tmp217 = w30*(B_0_3 + B_0_7);                                          const double tmp217 = w33*(B_0_3 + B_0_7);
6333                                          const double tmp218 = w31*(B_1_2 + B_1_6);                                          const double tmp218 = w42*(B_1_1 + B_1_5);
6334                                          const double tmp219 = w37*(B_1_0 + B_1_4);                                          const double tmp219 = w37*(B_1_3 + B_1_7);
6335                                          const double tmp220 = w39*(B_1_1 + B_1_5);                                          const double tmp220 = w40*(B_1_0 + B_1_4);
6336                                          const double tmp221 = w34*(B_1_3 + B_1_7);                                          const double tmp221 = w34*(B_1_2 + B_1_6);
6337                                          const double tmp222 = w36*(-B_0_1 - B_0_7);                                          const double tmp222 = w39*(-B_0_1 - B_0_7);
6338                                          const double tmp223 = w33*(-B_0_0 - B_0_6);                                          const double tmp223 = w36*(-B_0_0 - B_0_6);
6339                                          const double tmp224 = w42*(-B_2_6 - B_2_7);                                          const double tmp224 = w38*(-B_2_0 - B_2_1);
6340                                          const double tmp225 = w35*(-B_2_0 - B_2_1);                                          const double tmp225 = w35*(-B_2_2 - B_2_3);
6341                                          const double tmp226 = w32*(-B_2_2 - B_2_3);                                          const double tmp226 = w45*(-B_2_6 - B_2_7);
6342                                          const double tmp227 = w43*(-B_2_4 - B_2_5);                                          const double tmp227 = w46*(-B_2_4 - B_2_5);
6343                                          const double tmp228 = w31*(B_1_3 + B_1_7);                                          const double tmp228 = w38*(B_2_4 + B_2_6);
6344                                          const double tmp229 = w42*(B_2_1 + B_2_3);                                          const double tmp229 = w42*(B_1_0 + B_1_4);
6345                                          const double tmp230 = w35*(B_2_4 + B_2_6);                                          const double tmp230 = w35*(B_2_5 + B_2_7);
6346                                          const double tmp231 = w37*(B_1_1 + B_1_5);                                          const double tmp231 = w37*(B_1_2 + B_1_6);
6347                                          const double tmp232 = w32*(B_2_5 + B_2_7);                                          const double tmp232 = w39*(-B_0_0 - B_0_2 - B_0_4 - B_0_6);
6348                                          const double tmp233 = w39*(B_1_0 + B_1_4);                                          const double tmp233 = w45*(B_2_1 + B_2_3);
6349                                          const double tmp234 = w36*(-B_0_0 - B_0_2 - B_0_4 - B_0_6);                                          const double tmp234 = w36*(-B_0_1 - B_0_3 - B_0_5 - B_0_7);
6350                                          const double tmp235 = w33*(-B_0_1 - B_0_3 - B_0_5 - B_0_7);                                          const double tmp235 = w40*(B_1_1 + B_1_5);
6351                                          const double tmp236 = w43*(B_2_0 + B_2_2);                                          const double tmp236 = w46*(B_2_0 + B_2_2);
6352                                          const double tmp237 = w34*(B_1_2 + B_1_6);                                          const double tmp237 = w34*(B_1_3 + B_1_7);
6353                                          const double tmp238 = w31*(-B_1_1 - B_1_5);                                          const double tmp238 = w42*(-B_1_2 - B_1_6);
6354                                          const double tmp239 = w37*(-B_1_3 - B_1_7);                                          const double tmp239 = w37*(-B_1_0 - B_1_4);
6355                                          const double tmp240 = w39*(-B_1_2 - B_1_6);                                          const double tmp240 = w40*(-B_1_3 - B_1_7);
6356                                          const double tmp241 = w34*(-B_1_0 - B_1_4);                                          const double tmp241 = w34*(-B_1_1 - B_1_5);
6357                                          const double tmp242 = w31*(-B_1_6 - B_1_7);                                          const double tmp242 = w38*(-B_2_4 - B_2_5);
6358                                          const double tmp243 = w42*(-B_2_2 - B_2_3);                                          const double tmp243 = w42*(-B_1_0 - B_1_1);
6359                                          const double tmp244 = w35*(-B_2_4 - B_2_5);                                          const double tmp244 = w35*(-B_2_6 - B_2_7);
6360                                          const double tmp245 = w37*(-B_1_4 - B_1_5);                                          const double tmp245 = w37*(-B_1_2 - B_1_3);
6361                                          const double tmp246 = w32*(-B_2_6 - B_2_7);                                          const double tmp246 = w45*(-B_2_2 - B_2_3);
6362                                          const double tmp247 = w39*(-B_1_0 - B_1_1);                                          const double tmp247 = w40*(-B_1_4 - B_1_5);
6363                                          const double tmp248 = w43*(-B_2_0 - B_2_1);                                          const double tmp248 = w46*(-B_2_0 - B_2_1);
6364                                          const double tmp249 = w34*(-B_1_2 - B_1_3);                                          const double tmp249 = w34*(-B_1_6 - B_1_7);
6365                                          const double tmp250 = w31*(B_1_2 + B_1_3);                                          const double tmp250 = w42*(B_1_4 + B_1_5);
6366                                          const double tmp251 = w37*(B_1_0 + B_1_1);                                          const double tmp251 = w37*(B_1_6 + B_1_7);
6367                                          const double tmp252 = w39*(B_1_4 + B_1_5);                                          const double tmp252 = w40*(B_1_0 + B_1_1);
6368                                          const double tmp253 = w34*(B_1_6 + B_1_7);                                          const double tmp253 = w34*(B_1_2 + B_1_3);
6369                                          const double tmp254 = w42*(-B_2_4 - B_2_6);                                          const double tmp254 = w38*(-B_2_1 - B_2_3);
6370                                          const double tmp255 = w35*(-B_2_1 - B_2_3);                                          const double tmp255 = w35*(-B_2_0 - B_2_2);
6371                                          const double tmp256 = w32*(-B_2_0 - B_2_2);                                          const double tmp256 = w45*(-B_2_4 - B_2_6);
6372                                          const double tmp257 = w43*(-B_2_5 - B_2_7);                                          const double tmp257 = w46*(-B_2_5 - B_2_7);
6373                                          const double tmp258 = w42*(B_2_4 + B_2_5 + B_2_6 + B_2_7);                                          const double tmp258 = w38*(B_2_0 + B_2_1 + B_2_2 + B_2_3);
6374                                          const double tmp259 = w35*(B_2_0 + B_2_1 + B_2_2 + B_2_3);                                          const double tmp259 = w45*(B_2_4 + B_2_5 + B_2_6 + B_2_7);
6375                                          const double tmp260 = w42*(-B_2_5 - B_2_7);                                          const double tmp260 = w38*(-B_2_0 - B_2_2);
6376                                          const double tmp261 = w35*(-B_2_0 - B_2_2);                                          const double tmp261 = w35*(-B_2_1 - B_2_3);
6377                                          const double tmp262 = w32*(-B_2_1 - B_2_3);                                          const double tmp262 = w45*(-B_2_5 - B_2_7);
6378                                          const double tmp263 = w43*(-B_2_4 - B_2_6);                                          const double tmp263 = w46*(-B_2_4 - B_2_6);
6379                                          EM_S[INDEX4(k,m,0,0,numEq,numComp,8)]+=-B_0_0*w47 - B_0_1*w38 - B_0_6*w30 - B_0_7*w46 + B_1_0*w44 - B_1_2*w39 - B_1_5*w31 + B_1_7*w45 - B_2_0*w40 - B_2_3*w32 - B_2_4*w43 - B_2_7*w41 + tmp132 + tmp133 + tmp208 + tmp209 + tmp210 + tmp211;                                          EM_S[INDEX4(k,m,0,0,numEq,numComp,8)]+=-B_0_0*w50 - B_0_1*w41 - B_0_6*w33 - B_0_7*w49 + B_1_0*w47 - B_1_2*w42 - B_1_5*w34 + B_1_7*w48 - B_2_0*w43 - B_2_3*w35 - B_2_4*w46 - B_2_7*w44 + tmp132 + tmp137 + tmp208 + tmp209 + tmp210 + tmp211;
6380                                          EM_S[INDEX4(k,m,0,1,numEq,numComp,8)]+=-B_0_0*w38 - B_0_1*w47 - B_0_6*w46 - B_0_7*w30 + tmp128 + tmp129 + tmp242 + tmp243 + tmp244 + tmp245 + tmp246 + tmp247 + tmp248 + tmp249;                                          EM_S[INDEX4(k,m,0,1,numEq,numComp,8)]+=-B_0_0*w41 - B_0_1*w50 - B_0_6*w49 - B_0_7*w33 + tmp126 + tmp128 + tmp242 + tmp243 + tmp244 + tmp245 + tmp246 + tmp247 + tmp248 + tmp249;
6381                                          EM_S[INDEX4(k,m,0,2,numEq,numComp,8)]+=-B_1_0*w39 + B_1_2*w44 + B_1_5*w45 - B_1_7*w31 + tmp138 + tmp139 + tmp140 + tmp142 + tmp143 + tmp144 + tmp145 + tmp146 + tmp173 + tmp179;                                          EM_S[INDEX4(k,m,0,2,numEq,numComp,8)]+=-B_1_0*w42 + B_1_2*w47 + B_1_5*w48 - B_1_7*w34 + tmp138 + tmp139 + tmp140 + tmp142 + tmp143 + tmp144 + tmp146 + tmp147 + tmp173 + tmp177;
6382                                          EM_S[INDEX4(k,m,0,3,numEq,numComp,8)]+=tmp100 + tmp101 + tmp102 + tmp103 + tmp42 + tmp43 + tmp96 + tmp97 + tmp98 + tmp99;                                          EM_S[INDEX4(k,m,0,3,numEq,numComp,8)]+=tmp100 + tmp101 + tmp102 + tmp103 + tmp40 + tmp45 + tmp96 + tmp97 + tmp98 + tmp99;
6383                                          EM_S[INDEX4(k,m,0,4,numEq,numComp,8)]+=-B_2_0*w43 - B_2_3*w41 - B_2_4*w40 - B_2_7*w32 + tmp114 + tmp115 + tmp116 + tmp117 + tmp118 + tmp119 + tmp120 + tmp121 + tmp92 + tmp93;                                          EM_S[INDEX4(k,m,0,4,numEq,numComp,8)]+=-B_2_0*w46 - B_2_3*w44 - B_2_4*w43 - B_2_7*w35 + tmp114 + tmp115 + tmp116 + tmp117 + tmp118 + tmp119 + tmp120 + tmp121 + tmp92 + tmp93;
6384                                          EM_S[INDEX4(k,m,0,5,numEq,numComp,8)]+=tmp190 + tmp193 + tmp195 + tmp196 + tmp197 + tmp199 + tmp224 + tmp225 + tmp226 + tmp227;                                          EM_S[INDEX4(k,m,0,5,numEq,numComp,8)]+=tmp192 + tmp193 + tmp194 + tmp196 + tmp197 + tmp198 + tmp224 + tmp225 + tmp226 + tmp227;
6385                                          EM_S[INDEX4(k,m,0,6,numEq,numComp,8)]+=tmp234 + tmp235 + tmp238 + tmp239 + tmp240 + tmp241 + tmp260 + tmp261 + tmp262 + tmp263;                                          EM_S[INDEX4(k,m,0,6,numEq,numComp,8)]+=tmp232 + tmp234 + tmp238 + tmp239 + tmp240 + tmp241 + tmp260 + tmp261 + tmp262 + tmp263;
6386                                          EM_S[INDEX4(k,m,0,7,numEq,numComp,8)]+=tmp60 + tmp61 + tmp62 + tmp63 + tmp64 + tmp65;                                          EM_S[INDEX4(k,m,0,7,numEq,numComp,8)]+=tmp60 + tmp61 + tmp62 + tmp63 + tmp64 + tmp65;
6387                                          EM_S[INDEX4(k,m,1,0,numEq,numComp,8)]+=B_0_0*w47 + B_0_1*w38 + B_0_6*w30 + B_0_7*w46 + tmp148 + tmp149 + tmp242 + tmp243 + tmp244 + tmp245 + tmp246 + tmp247 + tmp248 + tmp249;                                          EM_S[INDEX4(k,m,1,0,numEq,numComp,8)]+=B_0_0*w50 + B_0_1*w41 + B_0_6*w33 + B_0_7*w49 + tmp148 + tmp149 + tmp242 + tmp243 + tmp244 + tmp245 + tmp246 + tmp247 + tmp248 + tmp249;
6388                                          EM_S[INDEX4(k,m,1,1,numEq,numComp,8)]+=B_0_0*w38 + B_0_1*w47 + B_0_6*w46 + B_0_7*w30 + B_1_1*w44 - B_1_3*w39 - B_1_4*w31 + B_1_6*w45 - B_2_1*w40 - B_2_2*w32 - B_2_5*w43 - B_2_6*w41 + tmp152 + tmp155 + tmp164 + tmp165 + tmp168 + tmp169;                                          EM_S[INDEX4(k,m,1,1,numEq,numComp,8)]+=B_0_0*w41 + B_0_1*w50 + B_0_6*w49 + B_0_7*w33 + B_1_1*w47 - B_1_3*w42 - B_1_4*w34 + B_1_6*w48 - B_2_1*w43 - B_2_2*w35 - B_2_5*w46 - B_2_6*w44 + tmp151 + tmp155 + tmp164 + tmp167 + tmp168 + tmp169;
6389                                          EM_S[INDEX4(k,m,1,2,numEq,numComp,8)]+=tmp103 + tmp40 + tmp42 + tmp43 + tmp46 + tmp47 + tmp48 + tmp97 + tmp98 + tmp99;                                          EM_S[INDEX4(k,m,1,2,numEq,numComp,8)]+=tmp101 + tmp103 + tmp40 + tmp42 + tmp44 + tmp45 + tmp46 + tmp48 + tmp96 + tmp98;
6390                                          EM_S[INDEX4(k,m,1,3,numEq,numComp,8)]+=-B_1_1*w39 + B_1_3*w44 + B_1_4*w45 - B_1_6*w31 + tmp20 + tmp21 + tmp22 + tmp23 + tmp24 + tmp25 + tmp26 + tmp27 + tmp28 + tmp29;                                          EM_S[INDEX4(k,m,1,3,numEq,numComp,8)]+=-B_1_1*w42 + B_1_3*w47 + B_1_4*w48 - B_1_6*w34 + tmp20 + tmp21 + tmp22 + tmp23 + tmp24 + tmp25 + tmp26 + tmp27 + tmp28 + tmp29;
6391                                          EM_S[INDEX4(k,m,1,4,numEq,numComp,8)]+=tmp193 + tmp199 + tmp214 + tmp215 + tmp216 + tmp217 + tmp224 + tmp225 + tmp226 + tmp227;                                          EM_S[INDEX4(k,m,1,4,numEq,numComp,8)]+=tmp193 + tmp197 + tmp214 + tmp215 + tmp216 + tmp217 + tmp224 + tmp225 + tmp226 + tmp227;
6392                                          EM_S[INDEX4(k,m,1,5,numEq,numComp,8)]+=-B_2_1*w43 - B_2_2*w41 - B_2_5*w40 - B_2_6*w32 + tmp72 + tmp73 + tmp82 + tmp83 + tmp86 + tmp87 + tmp88 + tmp89 + tmp90 + tmp91;                                          EM_S[INDEX4(k,m,1,5,numEq,numComp,8)]+=-B_2_1*w46 - B_2_2*w44 - B_2_5*w43 - B_2_6*w35 + tmp70 + tmp75 + tmp83 + tmp84 + tmp85 + tmp86 + tmp88 + tmp89 + tmp90 + tmp91;
6393                                          EM_S[INDEX4(k,m,1,6,numEq,numComp,8)]+=tmp60 + tmp61 + tmp62 + tmp65 + tmp80 + tmp81;                                          EM_S[INDEX4(k,m,1,6,numEq,numComp,8)]+=tmp60 + tmp61 + tmp63 + tmp65 + tmp80 + tmp81;
6394                                          EM_S[INDEX4(k,m,1,7,numEq,numComp,8)]+=tmp180 + tmp183 + tmp185 + tmp186 + tmp187 + tmp189 + tmp254 + tmp255 + tmp256 + tmp257;                                          EM_S[INDEX4(k,m,1,7,numEq,numComp,8)]+=tmp181 + tmp183 + tmp184 + tmp186 + tmp187 + tmp189 + tmp254 + tmp255 + tmp256 + tmp257;
6395                                          EM_S[INDEX4(k,m,2,0,numEq,numComp,8)]+=-B_1_0*w44 + B_1_2*w39 + B_1_5*w31 - B_1_7*w45 + tmp138 + tmp139 + tmp140 + tmp141 + tmp142 + tmp143 + tmp144 + tmp145 + tmp146 + tmp147;                                          EM_S[INDEX4(k,m,2,0,numEq,numComp,8)]+=-B_1_0*w47 + B_1_2*w42 + B_1_5*w34 - B_1_7*w48 + tmp138 + tmp139 + tmp140 + tmp141 + tmp142 + tmp143 + tmp144 + tmp145 + tmp146 + tmp147;
6396                                          EM_S[INDEX4(k,m,2,1,numEq,numComp,8)]+=tmp100 + tmp101 + tmp102 + tmp41 + tmp42 + tmp43 + tmp44 + tmp45 + tmp49 + tmp96;                                          EM_S[INDEX4(k,m,2,1,numEq,numComp,8)]+=tmp100 + tmp102 + tmp40 + tmp41 + tmp43 + tmp45 + tmp47 + tmp49 + tmp97 + tmp99;
6397                                          EM_S[INDEX4(k,m,2,2,numEq,numComp,8)]+=-B_0_2*w47 - B_0_3*w38 - B_0_4*w30 - B_0_5*w46 + B_1_0*w39 - B_1_2*w44 - B_1_5*w45 + B_1_7*w31 - B_2_1*w32 - B_2_2*w40 - B_2_5*w41 - B_2_6*w43 + tmp153 + tmp154 + tmp164 + tmp165 + tmp166 + tmp167;                                          EM_S[INDEX4(k,m,2,2,numEq,numComp,8)]+=-B_0_2*w50 - B_0_3*w41 - B_0_4*w33 - B_0_5*w49 + B_1_0*w42 - B_1_2*w47 - B_1_5*w48 + B_1_7*w34 - B_2_1*w35 - B_2_2*w43 - B_2_5*w44 - B_2_6*w46 + tmp152 + tmp154 + tmp164 + tmp165 + tmp166 + tmp167;
6398                                          EM_S[INDEX4(k,m,2,3,numEq,numComp,8)]+=-B_0_2*w38 - B_0_3*w47 - B_0_4*w46 - B_0_5*w30 + tmp200 + tmp201 + tmp202 + tmp203 + tmp204 + tmp205 + tmp206 + tmp207 + tmp222 + tmp223;                                          EM_S[INDEX4(k,m,2,3,numEq,numComp,8)]+=-B_0_2*w41 - B_0_3*w50 - B_0_4*w49 - B_0_5*w33 + tmp200 + tmp201 + tmp202 + tmp203 + tmp204 + tmp205 + tmp206 + tmp207 + tmp222 + tmp223;
6399                                          EM_S[INDEX4(k,m,2,4,numEq,numComp,8)]+=tmp228 + tmp231 + tmp233 + tmp234 + tmp235 + tmp237 + tmp260 + tmp261 + tmp262 + tmp263;                                          EM_S[INDEX4(k,m,2,4,numEq,numComp,8)]+=tmp229 + tmp231 + tmp232 + tmp234 + tmp235 + tmp237 + tmp260 + tmp261 + tmp262 + tmp263;
6400                                          EM_S[INDEX4(k,m,2,5,numEq,numComp,8)]+=tmp60 + tmp61 + tmp63 + tmp64 + tmp94 + tmp95;                                          EM_S[INDEX4(k,m,2,5,numEq,numComp,8)]+=tmp60 + tmp62 + tmp63 + tmp64 + tmp94 + tmp95;
6401                                          EM_S[INDEX4(k,m,2,6,numEq,numComp,8)]+=-B_2_1*w41 - B_2_2*w43 - B_2_5*w32 - B_2_6*w40 + tmp70 + tmp71 + tmp72 + tmp73 + tmp74 + tmp75 + tmp76 + tmp77 + tmp78 + tmp79;                                          EM_S[INDEX4(k,m,2,6,numEq,numComp,8)]+=-B_2_1*w44 - B_2_2*w46 - B_2_5*w35 - B_2_6*w43 + tmp70 + tmp71 + tmp72 + tmp73 + tmp74 + tmp75 + tmp76 + tmp77 + tmp78 + tmp79;
6402                                          EM_S[INDEX4(k,m,2,7,numEq,numComp,8)]+=tmp107 + tmp113 + tmp156 + tmp157 + tmp158 + tmp159 + tmp160 + tmp161 + tmp162 + tmp163;                                          EM_S[INDEX4(k,m,2,7,numEq,numComp,8)]+=tmp107 + tmp111 + tmp156 + tmp157 + tmp158 + tmp159 + tmp160 + tmp161 + tmp162 + tmp163;
6403                                          EM_S[INDEX4(k,m,3,0,numEq,numComp,8)]+=tmp40 + tmp41 + tmp42 + tmp43 + tmp44 + tmp45 + tmp46 + tmp47 + tmp48 + tmp49;                                          EM_S[INDEX4(k,m,3,0,numEq,numComp,8)]+=tmp40 + tmp41 + tmp42 + tmp43 + tmp44 + tmp45 + tmp46 + tmp47 + tmp48 + tmp49;
6404                                          EM_S[INDEX4(k,m,3,1,numEq,numComp,8)]+=-B_1_1*w44 + B_1_3*w39 + B_1_4*w31 - B_1_6*w45 + tmp20 + tmp21 + tmp22 + tmp24 + tmp25 + tmp26 + tmp27 + tmp28 + tmp33 + tmp39;                                          EM_S[INDEX4(k,m,3,1,numEq,numComp,8)]+=-B_1_1*w47 + B_1_3*w42 + B_1_4*w34 - B_1_6*w48 + tmp20 + tmp21 + tmp22 + tmp24 + tmp25 + tmp26 + tmp28 + tmp29 + tmp33 + tmp37;
6405                                          EM_S[INDEX4(k,m,3,2,numEq,numComp,8)]+=B_0_2*w47 + B_0_3*w38 + B_0_4*w30 + B_0_5*w46 + tmp200 + tmp201 + tmp202 + tmp203 + tmp204 + tmp205 + tmp206 + tmp207 + tmp56 + tmp57;                                          EM_S[INDEX4(k,m,3,2,numEq,numComp,8)]+=B_0_2*w50 + B_0_3*w41 + B_0_4*w33 + B_0_5*w49 + tmp200 + tmp201 + tmp202 + tmp203 + tmp204 + tmp205 + tmp206 + tmp207 + tmp54 + tmp56;
6406                                          EM_S[INDEX4(k,m,3,3,numEq,numComp,8)]+=B_0_2*w38 + B_0_3*w47 + B_0_4*w46 + B_0_5*w30 + B_1_1*w39 - B_1_3*w44 - B_1_4*w45 + B_1_6*w31 - B_2_0*w32 - B_2_3*w40 - B_2_4*w41 - B_2_7*w43 + tmp132 + tmp133 + tmp134 + tmp135 + tmp136 + tmp137;                                          EM_S[INDEX4(k,m,3,3,numEq,numComp,8)]+=B_0_2*w41 + B_0_3*w50 + B_0_4*w49 + B_0_5*w33 + B_1_1*w42 - B_1_3*w47 - B_1_4*w48 + B_1_6*w34 - B_2_0*w35 - B_2_3*w43 - B_2_4*w44 - B_2_7*w46 + tmp132 + tmp133 + tmp134 + tmp135 + tmp136 + tmp137;
6407                                          EM_S[INDEX4(k,m,3,4,numEq,numComp,8)]+=tmp60 + tmp61 + tmp80 + tmp81 + tmp94 + tmp95;                                          EM_S[INDEX4(k,m,3,4,numEq,numComp,8)]+=tmp60 + tmp63 + tmp80 + tmp81 + tmp94 + tmp95;
6408                                          EM_S[INDEX4(k,m,3,5,numEq,numComp,8)]+=tmp186 + tmp187 + tmp218 + tmp219 + tmp220 + tmp221 + tmp254 + tmp255 + tmp256 + tmp257;                                          EM_S[INDEX4(k,m,3,5,numEq,numComp,8)]+=tmp184 + tmp186 + tmp218 + tmp219 + tmp220 + tmp221 + tmp254 + tmp255 + tmp256 + tmp257;
6409                                          EM_S[INDEX4(k,m,3,6,numEq,numComp,8)]+=tmp104 + tmp107 + tmp109 + tmp110 + tmp111 + tmp113 + tmp160 + tmp161 + tmp162 + tmp163;                                          EM_S[INDEX4(k,m,3,6,numEq,numComp,8)]+=tmp106 + tmp107 + tmp108 + tmp110 + tmp111 + tmp112 + tmp160 + tmp161 + tmp162 + tmp163;
6410                                          EM_S[INDEX4(k,m,3,7,numEq,numComp,8)]+=-B_2_0*w41 - B_2_3*w43 - B_2_4*w32 - B_2_7*w40 + tmp0 + tmp1 + tmp4 + tmp5 + tmp6 + tmp7 + tmp8 + tmp9 + tmp92 + tmp93;                                          EM_S[INDEX4(k,m,3,7,numEq,numComp,8)]+=-B_2_0*w44 - B_2_3*w46 - B_2_4*w35 - B_2_7*w43 + tmp1 + tmp2 + tmp3 + tmp4 + tmp6 + tmp7 + tmp8 + tmp9 + tmp92 + tmp93;
6411                                          EM_S[INDEX4(k,m,4,0,numEq,numComp,8)]+=B_2_0*w40 + B_2_3*w32 + B_2_4*w43 + B_2_7*w41 + tmp114 + tmp115 + tmp116 + tmp117 + tmp118 + tmp119 + tmp120 + tmp121 + tmp2 + tmp3;                                          EM_S[INDEX4(k,m,4,0,numEq,numComp,8)]+=B_2_0*w43 + B_2_3*w35 + B_2_4*w46 + B_2_7*w44 + tmp0 + tmp114 + tmp115 + tmp116 + tmp117 + tmp118 + tmp119 + tmp120 + tmp121 + tmp5;
6412                                          EM_S[INDEX4(k,m,4,1,numEq,numComp,8)]+=tmp190 + tmp191 + tmp192 + tmp193 + tmp194 + tmp195 + tmp196 + tmp197 + tmp198 + tmp199;                                          EM_S[INDEX4(k,m,4,1,numEq,numComp,8)]+=tmp190 + tmp191 + tmp192 + tmp193 + tmp194 + tmp195 + tmp196 + tmp197 + tmp198 + tmp199;
6413                                          EM_S[INDEX4(k,m,4,2,numEq,numComp,8)]+=tmp229 + tmp230 + tmp232 + tmp234 + tmp235 + tmp236 + tmp238 + tmp239 + tmp240 + tmp241;                                          EM_S[INDEX4(k,m,4,2,numEq,numComp,8)]+=tmp228 + tmp230 + tmp232 + tmp233 + tmp234 + tmp236 + tmp238 + tmp239 + tmp240 + tmp241;
6414                                          EM_S[INDEX4(k,m,4,3,numEq,numComp,8)]+=tmp258 + tmp259 + tmp62 + tmp63 + tmp64 + tmp65;                                          EM_S[INDEX4(k,m,4,3,numEq,numComp,8)]+=tmp258 + tmp259 + tmp61 + tmp62 + tmp64 + tmp65;
6415                                          EM_S[INDEX4(k,m,4,4,numEq,numComp,8)]+=-B_0_2*w30 - B_0_3*w46 - B_0_4*w47 - B_0_5*w38 - B_1_1*w31 + B_1_3*w45 + B_1_4*w44 - B_1_6*w39 + B_2_0*w43 + B_2_3*w41 + B_2_4*w40 + B_2_7*w32 + tmp150 + tmp151 + tmp152 + tmp153 + tmp154 + tmp155;                                          EM_S[INDEX4(k,m,4,4,numEq,numComp,8)]+=-B_0_2*w33 - B_0_3*w49 - B_0_4*w50 - B_0_5*w41 - B_1_1*w34 + B_1_3*w48 + B_1_4*w47 - B_1_6*w42 + B_2_0*w46 + B_2_3*w44 + B_2_4*w43 + B_2_7*w35 + tmp150 + tmp151 + tmp152 + tmp153 + tmp154 + tmp155;
6416                                          EM_S[INDEX4(k,m,4,5,numEq,numComp,8)]+=-B_0_2*w46 - B_0_3*w30 - B_0_4*w38 - B_0_5*w47 + tmp222 + tmp223 + tmp50 + tmp51 + tmp52 + tmp53 + tmp54 + tmp55 + tmp58 + tmp59;                                          EM_S[INDEX4(k,m,4,5,numEq,numComp,8)]+=-B_0_2*w49 - B_0_3*w33 - B_0_4*w41 - B_0_5*w50 + tmp222 + tmp223 + tmp50 + tmp51 + tmp52 + tmp53 + tmp55 + tmp57 + tmp58 + tmp59;
6417                                          EM_S[INDEX4(k,m,4,6,numEq,numComp,8)]+=B_1_1*w45 - B_1_3*w31 - B_1_4*w39 + B_1_6*w44 + tmp23 + tmp29 + tmp30 + tmp31 + tmp32 + tmp34 + tmp35 + tmp36 + tmp37 + tmp38;                                          EM_S[INDEX4(k,m,4,6,numEq,numComp,8)]+=B_1_1*w48 - B_1_3*w34 - B_1_4*w42 + B_1_6*w47 + tmp23 + tmp27 + tmp30 + tmp31 + tmp32 + tmp34 + tmp35 + tmp36 + tmp38 + tmp39;
6418                                          EM_S[INDEX4(k,m,4,7,numEq,numComp,8)]+=tmp10 + tmp11 + tmp12 + tmp13 + tmp14 + tmp15 + tmp16 + tmp17 + tmp18 + tmp19;                                          EM_S[INDEX4(k,m,4,7,numEq,numComp,8)]+=tmp10 + tmp11 + tmp12 + tmp13 + tmp14 + tmp15 + tmp16 + tmp17 + tmp18 + tmp19;
6419                                          EM_S[INDEX4(k,m,5,0,numEq,numComp,8)]+=tmp191 + tmp192 + tmp193 + tmp194 + tmp198 + tmp199 + tmp214 + tmp215 + tmp216 + tmp217;                                          EM_S[INDEX4(k,m,5,0,numEq,numComp,8)]+=tmp190 + tmp191 + tmp193 + tmp195 + tmp197 + tmp199 + tmp214 + tmp215 + tmp216 + tmp217;
6420                                          EM_S[INDEX4(k,m,5,1,numEq,numComp,8)]+=B_2_1*w40 + B_2_2*w32 + B_2_5*w43 + B_2_6*w41 + tmp82 + tmp83 + tmp84 + tmp85 + tmp86 + tmp87 + tmp88 + tmp89 + tmp90 + tmp91;                                          EM_S[INDEX4(k,m,5,1,numEq,numComp,8)]+=B_2_1*w43 + B_2_2*w35 + B_2_5*w46 + B_2_6*w44 + tmp82 + tmp83 + tmp84 + tmp85 + tmp86 + tmp87 + tmp88 + tmp89 + tmp90 + tmp91;
6421                                          EM_S[INDEX4(k,m,5,2,numEq,numComp,8)]+=tmp258 + tmp259 + tmp62 + tmp65 + tmp80 + tmp81;                                          EM_S[INDEX4(k,m,5,2,numEq,numComp,8)]+=tmp258 + tmp259 + tmp61 + tmp65 + tmp80 + tmp81;
6422                                          EM_S[INDEX4(k,m,5,3,numEq,numComp,8)]+=tmp180 + tmp181 + tmp182 + tmp183 + tmp184 + tmp185 + tmp186 + tmp187 + tmp188 + tmp189;                                          EM_S[INDEX4(k,m,5,3,numEq,numComp,8)]+=tmp180 + tmp181 + tmp182 + tmp183 + tmp184 + tmp185 + tmp186 + tmp187 + tmp188 + tmp189;
6423                                          EM_S[INDEX4(k,m,5,4,numEq,numComp,8)]+=B_0_2*w30 + B_0_3*w46 + B_0_4*w47 + B_0_5*w38 + tmp50 + tmp51 + tmp52 + tmp53 + tmp54 + tmp55 + tmp56 + tmp57 + tmp58 + tmp59;                                          EM_S[INDEX4(k,m,5,4,numEq,numComp,8)]+=B_0_2*w33 + B_0_3*w49 + B_0_4*w50 + B_0_5*w41 + tmp50 + tmp51 + tmp52 + tmp53 + tmp54 + tmp55 + tmp56 + tmp57 + tmp58 + tmp59;
6424                                          EM_S[INDEX4(k,m,5,5,numEq,numComp,8)]+=B_0_2*w46 + B_0_3*w30 + B_0_4*w38 + B_0_5*w47 - B_1_0*w31 + B_1_2*w45 + B_1_5*w44 - B_1_7*w39 + B_2_1*w43 + B_2_2*w41 + B_2_5*w40 + B_2_6*w32 + tmp135 + tmp136 + tmp208 + tmp211 + tmp212 + tmp213;                                          EM_S[INDEX4(k,m,5,5,numEq,numComp,8)]+=B_0_2*w49 + B_0_3*w33 + B_0_4*w41 + B_0_5*w50 - B_1_0*w34 + B_1_2*w48 + B_1_5*w47 - B_1_7*w42 + B_2_1*w46 + B_2_2*w44 + B_2_5*w43 + B_2_6*w35 + tmp134 + tmp135 + tmp208 + tmp211 + tmp212 + tmp213;
6425                                          EM_S[INDEX4(k,m,5,6,numEq,numComp,8)]+=tmp11 + tmp12 + tmp13 + tmp14 + tmp15 + tmp19 + tmp66 + tmp67 + tmp68 + tmp69;                                          EM_S[INDEX4(k,m,5,6,numEq,numComp,8)]+=tmp10 + tmp11 + tmp13 + tmp15 + tmp17 + tmp19 + tmp66 + tmp67 + tmp68 + tmp69;
6426                                          EM_S[INDEX4(k,m,5,7,numEq,numComp,8)]+=B_1_0*w45 - B_1_2*w31 - B_1_5*w39 + B_1_7*w44 + tmp170 + tmp171 + tmp172 + tmp173 + tmp174 + tmp175 + tmp176 + tmp177 + tmp178 + tmp179;                                          EM_S[INDEX4(k,m,5,7,numEq,numComp,8)]+=B_1_0*w48 - B_1_2*w34 - B_1_5*w42 + B_1_7*w47 + tmp170 + tmp171 + tmp172 + tmp173 + tmp174 + tmp175 + tmp176 + tmp177 + tmp178 + tmp179;
6427                                          EM_S[INDEX4(k,m,6,0,numEq,numComp,8)]+=tmp228 + tmp229 + tmp230 + tmp231 + tmp232 + tmp233 + tmp234 + tmp235 + tmp236 + tmp237;                                          EM_S[INDEX4(k,m,6,0,numEq,numComp,8)]+=tmp228 + tmp229 + tmp230 + tmp231 + tmp232 + tmp233 + tmp234 + tmp235 + tmp236 + tmp237;
6428                                          EM_S[INDEX4(k,m,6,1,numEq,numComp,8)]+=tmp258 + tmp259 + tmp63 + tmp64 + tmp94 + tmp95;                                          EM_S[INDEX4(k,m,6,1,numEq,numComp,8)]+=tmp258 + tmp259 + tmp62 + tmp64 + tmp94 + tmp95;
6429                                          EM_S[INDEX4(k,m,6,2,numEq,numComp,8)]+=B_2_1*w32 + B_2_2*w40 + B_2_5*w41 + B_2_6*w43 + tmp70 + tmp71 + tmp74 + tmp75 + tmp76 + tmp77 + tmp78 + tmp79 + tmp84 + tmp85;                                          EM_S[INDEX4(k,m,6,2,numEq,numComp,8)]+=B_2_1*w35 + B_2_2*w43 + B_2_5*w44 + B_2_6*w46 + tmp71 + tmp72 + tmp73 + tmp74 + tmp76 + tmp77 + tmp78 + tmp79 + tmp82 + tmp87;
6430                                          EM_S[INDEX4(k,m,6,3,numEq,numComp,8)]+=tmp105 + tmp106 + tmp107 + tmp108 + tmp112 + tmp113 + tmp156 + tmp157 + tmp158 + tmp159;                                          EM_S[INDEX4(k,m,6,3,numEq,numComp,8)]+=tmp104 + tmp105 + tmp107 + tmp109 + tmp111 + tmp113 + tmp156 + tmp157 + tmp158 + tmp159;
6431                                          EM_S[INDEX4(k,m,6,4,numEq,numComp,8)]+=B_1_1*w31 - B_1_3*w45 - B_1_4*w44 + B_1_6*w39 + tmp30 + tmp31 + tmp32 + tmp33 + tmp34 + tmp35 + tmp36 + tmp37 + tmp38 + tmp39;                                          EM_S[INDEX4(k,m,6,4,numEq,numComp,8)]+=B_1_1*w34 - B_1_3*w48 - B_1_4*w47 + B_1_6*w42 + tmp30 + tmp31 + tmp32 + tmp33 + tmp34 + tmp35 + tmp36 + tmp37 + tmp38 + tmp39;
6432                                          EM_S[INDEX4(k,m,6,5,numEq,numComp,8)]+=tmp10 + tmp12 + tmp13 + tmp16 + tmp17 + tmp18 + tmp250 + tmp251 + tmp252 + tmp253;                                          EM_S[INDEX4(k,m,6,5,numEq,numComp,8)]+=tmp10 + tmp12 + tmp14 + tmp15 + tmp16 + tmp18 + tmp250 + tmp251 + tmp252 + tmp253;
6433                                          EM_S[INDEX4(k,m,6,6,numEq,numComp,8)]+=-B_0_0*w30 - B_0_1*w46 - B_0_6*w47 - B_0_7*w38 - B_1_1*w45 + B_1_3*w31 + B_1_4*w39 - B_1_6*w44 + B_2_1*w41 + B_2_2*w43 + B_2_5*w32 + B_2_6*w40 + tmp134 + tmp137 + tmp209 + tmp210 + tmp212 + tmp213;                                          EM_S[INDEX4(k,m,6,6,numEq,numComp,8)]+=-B_0_0*w33 - B_0_1*w49 - B_0_6*w50 - B_0_7*w41 - B_1_1*w48 + B_1_3*w34 + B_1_4*w42 - B_1_6*w47 + B_2_1*w44 + B_2_2*w46 + B_2_5*w35 + B_2_6*w43 + tmp133 + tmp136 + tmp209 + tmp210 + tmp212 + tmp213;
6434                                          EM_S[INDEX4(k,m,6,7,numEq,numComp,8)]+=-B_0_0*w46 - B_0_1*w30 - B_0_6*w38 - B_0_7*w47 + tmp122 + tmp123 + tmp124 + tmp125 + tmp126 + tmp127 + tmp128 + tmp129 + tmp130 + tmp131;                                          EM_S[INDEX4(k,m,6,7,numEq,numComp,8)]+=-B_0_0*w49 - B_0_1*w33 - B_0_6*w41 - B_0_7*w50 + tmp122 + tmp123 + tmp124 + tmp125 + tmp126 + tmp127 + tmp128 + tmp129 + tmp130 + tmp131;
6435                                          EM_S[INDEX4(k,m,7,0,numEq,numComp,8)]+=tmp258 + tmp259 + tmp80 + tmp81 + tmp94 + tmp95;                                          EM_S[INDEX4(k,m,7,0,numEq,numComp,8)]+=tmp258 + tmp259 + tmp80 + tmp81 + tmp94 + tmp95;
6436                                          EM_S[INDEX4(k,m,7,1,numEq,numComp,8)]+=tmp181 + tmp182 + tmp184 + tmp186 + tmp187 + tmp188 + tmp218 + tmp219 + tmp220 + tmp221;                                          EM_S[INDEX4(k,m,7,1,numEq,numComp,8)]+=tmp180 + tmp182 + tmp184 + tmp185 + tmp186 + tmp188 + tmp218 + tmp219 + tmp220 + tmp221;
6437                                          EM_S[INDEX4(k,m,7,2,numEq,numComp,8)]+=tmp104 + tmp105 + tmp106 + tmp107 + tmp108 + tmp109 + tmp110 + tmp111 + tmp112 + tmp113;                                          EM_S[INDEX4(k,m,7,2,numEq,numComp,8)]+=tmp104 + tmp105 + tmp106 + tmp107 + tmp108 + tmp109 + tmp110 + tmp111 + tmp112 + tmp113;
6438                                          EM_S[INDEX4(k,m,7,3,numEq,numComp,8)]+=B_2_0*w32 + B_2_3*w40 + B_2_4*w41 + B_2_7*w43 + tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 + tmp6 + tmp7 + tmp8 + tmp9;                                          EM_S[INDEX4(k,m,7,3,numEq,numComp,8)]+=B_2_0*w35 + B_2_3*w43 + B_2_4*w44 + B_2_7*w46 + tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 + tmp6 + tmp7 + tmp8 + tmp9;
6439                                          EM_S[INDEX4(k,m,7,4,numEq,numComp,8)]+=tmp12 + tmp13 + tmp250 + tmp251 + tmp252 + tmp253 + tmp66 + tmp67 + tmp68 + tmp69;                                          EM_S[INDEX4(k,m,7,4,numEq,numComp,8)]+=tmp10 + tmp15 + tmp250 + tmp251 + tmp252 + tmp253 + tmp66 + tmp67 + tmp68 + tmp69;
6440                                          EM_S[INDEX4(k,m,7,5,numEq,numComp,8)]+=B_1_0*w31 - B_1_2*w45 - B_1_5*w44 + B_1_7*w39 + tmp141 + tmp147 + tmp170 + tmp171 + tmp172 + tmp174 + tmp175 + tmp176 + tmp177 + tmp178;                                          EM_S[INDEX4(k,m,7,5,numEq,numComp,8)]+=B_1_0*w34 - B_1_2*w48 - B_1_5*w47 + B_1_7*w42 + tmp141 + tmp145 + tmp170 + tmp171 + tmp172 + tmp174 + tmp175 + tmp176 + tmp178 + tmp179;
6441                                          EM_S[INDEX4(k,m,7,6,numEq,numComp,8)]+=B_0_0*w30 + B_0_1*w46 + B_0_6*w47 + B_0_7*w38 + tmp122 + tmp123 + tmp124 + tmp125 + tmp126 + tmp127 + tmp130 + tmp131 + tmp148 + tmp149;                                          EM_S[INDEX4(k,m,7,6,numEq,numComp,8)]+=B_0_0*w33 + B_0_1*w49 + B_0_6*w50 + B_0_7*w41 + tmp122 + tmp123 + tmp124 + tmp125 + tmp127 + tmp129 + tmp130 + tmp131 + tmp148 + tmp149;
6442                                          EM_S[INDEX4(k,m,7,7,numEq,numComp,8)]+=B_0_0*w46 + B_0_1*w30 + B_0_6*w38 + B_0_7*w47 - B_1_0*w45 + B_1_2*w31 + B_1_5*w39 - B_1_7*w44 + B_2_0*w41 + B_2_3*w43 + B_2_4*w32 + B_2_7*w40 + tmp150 + tmp151 + tmp166 + tmp167 + tmp168 + tmp169;                                          EM_S[INDEX4(k,m,7,7,numEq,numComp,8)]+=B_0_0*w49 + B_0_1*w33 + B_0_6*w41 + B_0_7*w50 - B_1_0*w48 + B_1_2*w34 + B_1_5*w42 - B_1_7*w47 + B_2_0*w44 + B_2_3*w46 + B_2_4*w35 + B_2_7*w43 + tmp150 + tmp153 + tmp165 + tmp166 + tmp168 + tmp169;
6443                                      }                                      }
6444                                  }                                  }
6445                              } else { // constant data                              } else { // constant data
6446                                  for (index_t k=0; k<numEq; k++) {                                  for (index_t k=0; k<numEq; k++) {
6447                                      for (index_t m=0; m<numComp; m++) {                                      for (index_t m=0; m<numComp; m++) {
6448                                          const double B_0 = B_p[INDEX3(k,0,m,numEq,3)];                                          const double wB0 = B_p[INDEX3(k,0,m,numEq,3)]*w55;
6449                                          const double B_1 = B_p[INDEX3(k,1,m,numEq,3)];                                          const double wB1 = B_p[INDEX3(k,1,m,numEq,3)]*w56;
6450                                          const double B_2 = B_p[INDEX3(k,2,m,numEq,3)];                                          const double wB2 = B_p[INDEX3(k,2,m,numEq,3)]*w54;
6451                                          EM_S[INDEX4(k,m,0,0,numEq,numComp,8)]+=4*B_0*w53 + B_1*w51 - B_2*w50;                                          EM_S[INDEX4(k,m,0,0,numEq,numComp,8)]+= 4*wB0 + 4*wB1 + 4*wB2;
6452                                          EM_S[INDEX4(k,m,0,1,numEq,numComp,8)]+=4*B_0*w53 - B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,0,1,numEq,numComp,8)]+= 4*wB0 + 2*wB1 + 2*wB2;
6453                                          EM_S[INDEX4(k,m,0,2,numEq,numComp,8)]+=-B_0*w48 + B_1*w51 + B_2*w52;                                          EM_S[INDEX4(k,m,0,2,numEq,numComp,8)]+= 2*wB0 + 4*wB1 + 2*wB2;
6454                                          EM_S[INDEX4(k,m,0,3,numEq,numComp,8)]+=-B_0*w48 - B_1*w49 + B_2*w52/2;                                          EM_S[INDEX4(k,m,0,3,numEq,numComp,8)]+= 2*wB0 + 2*wB1 +   wB2;
6455                                          EM_S[INDEX4(k,m,0,4,numEq,numComp,8)]+=-B_0*w48 - B_1*w49 - B_2*w50;                                          EM_S[INDEX4(k,m,0,4,numEq,numComp,8)]+= 2*wB0 + 2*wB1 + 4*wB2;
6456                                          EM_S[INDEX4(k,m,0,5,numEq,numComp,8)]+=-B_0*w48 + B_1*w51/4 + B_2*w52;                                          EM_S[INDEX4(k,m,0,5,numEq,numComp,8)]+= 2*wB0 +   wB1 + 2*wB2;
6457                                          EM_S[INDEX4(k,m,0,6,numEq,numComp,8)]+=B_0*w53 - B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,0,6,numEq,numComp,8)]+=   wB0 + 2*wB1 + 2*wB2;
6458                                          EM_S[INDEX4(k,m,0,7,numEq,numComp,8)]+=B_0*w53 + B_1*w51/4 + B_2*w52/2;                                          EM_S[INDEX4(k,m,0,7,numEq,numComp,8)]+=   wB0 +   wB1 +   wB2;
6459                                          EM_S[INDEX4(k,m,1,0,numEq,numComp,8)]+=-4*B_0*w53 - B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,1,0,numEq,numComp,8)]+=-4*wB0 + 2*wB1 + 2*wB2;
6460                                          EM_S[INDEX4(k,m,1,1,numEq,numComp,8)]+=-4*B_0*w53 + B_1*w51 - B_2*w50;                                          EM_S[INDEX4(k,m,1,1,numEq,numComp,8)]+=-4*wB0 + 4*wB1 + 4*wB2;
6461                                          EM_S[INDEX4(k,m,1,2,numEq,numComp,8)]+=B_0*w48 - B_1*w49 + B_2*w52/2;                                          EM_S[INDEX4(k,m,1,2,numEq,numComp,8)]+=-2*wB0 + 2*wB1 +   wB2;
6462                                          EM_S[INDEX4(k,m,1,3,numEq,numComp,8)]+=B_0*w48 + B_1*w51 + B_2*w52;                                          EM_S[INDEX4(k,m,1,3,numEq,numComp,8)]+=-2*wB0 + 4*wB1 + 2*wB2;
6463                                          EM_S[INDEX4(k,m,1,4,numEq,numComp,8)]+=B_0*w48 + B_1*w51/4 + B_2*w52;                                          EM_S[INDEX4(k,m,1,4,numEq,numComp,8)]+=-2*wB0 +   wB1 + 2*wB2;
6464                                          EM_S[INDEX4(k,m,1,5,numEq,numComp,8)]+=B_0*w48 - B_1*w49 - B_2*w50;                                          EM_S[INDEX4(k,m,1,5,numEq,numComp,8)]+=-2*wB0 + 2*wB1 + 4*wB2;
6465                                          EM_S[INDEX4(k,m,1,6,numEq,numComp,8)]+=-B_0*w53 + B_1*w51/4 + B_2*w52/2;                                          EM_S[INDEX4(k,m,1,6,numEq,numComp,8)]+=  -wB0 +   wB1 +   wB2;
6466                                          EM_S[INDEX4(k,m,1,7,numEq,numComp,8)]+=-B_0*w53 - B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,1,7,numEq,numComp,8)]+=  -wB0 + 2*wB1 + 2*wB2;
6467                                          EM_S[INDEX4(k,m,2,0,numEq,numComp,8)]+=-B_0*w48 - B_1*w51 + B_2*w52;                                          EM_S[INDEX4(k,m,2,0,numEq,numComp,8)]+= 2*wB0 - 4*wB1 + 2*wB2;
6468                                          EM_S[INDEX4(k,m,2,1,numEq,numComp,8)]+=-B_0*w48 + B_1*w49 + B_2*w52/2;                                          EM_S[INDEX4(k,m,2,1,numEq,numComp,8)]+= 2*wB0 - 2*wB1 +   wB2;
6469                                          EM_S[INDEX4(k,m,2,2,numEq,numComp,8)]+=4*B_0*w53 - B_1*w51 - B_2*w50;                                          EM_S[INDEX4(k,m,2,2,numEq,numComp,8)]+= 4*wB0 - 4*wB1 + 4*wB2;
6470                                          EM_S[INDEX4(k,m,2,3,numEq,numComp,8)]+=4*B_0*w53 + B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,2,3,numEq,numComp,8)]+= 4*wB0 - 2*wB1 + 2*wB2;
6471                                          EM_S[INDEX4(k,m,2,4,numEq,numComp,8)]+=B_0*w53 + B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,2,4,numEq,numComp,8)]+=   wB0 - 2*wB1 + 2*wB2;
6472                                          EM_S[INDEX4(k,m,2,5,numEq,numComp,8)]+=B_0*w53 - B_1*w51/4 + B_2*w52/2;                                          EM_S[INDEX4(k,m,2,5,numEq,numComp,8)]+=   wB0 -   wB1 +   wB2;
6473                                          EM_S[INDEX4(k,m,2,6,numEq,numComp,8)]+=-B_0*w48 + B_1*w49 - B_2*w50;                                          EM_S[INDEX4(k,m,2,6,numEq,numComp,8)]+= 2*wB0 - 2*wB1 + 4*wB2;
6474                                          EM_S[INDEX4(k,m,2,7,numEq,numComp,8)]+=-B_0*w48 - B_1*w51/4 + B_2*w52;                                          EM_S[INDEX4(k,m,2,7,numEq,numComp,8)]+= 2*wB0 -   wB1 + 2*wB2;
6475                                          EM_S[INDEX4(k,m,3,0,numEq,numComp,8)]+=B_0*w48 + B_1*w49 + B_2*w52/2;                                          EM_S[INDEX4(k,m,3,0,numEq,numComp,8)]+=-2*wB0 - 2*wB1 +   wB2;
6476                                          EM_S[INDEX4(k,m,3,1,numEq,numComp,8)]+=B_0*w48 - B_1*w51 + B_2*w52;                                          EM_S[INDEX4(k,m,3,1,numEq,numComp,8)]+=-2*wB0 - 4*wB1 + 2*wB2;
6477                                          EM_S[INDEX4(k,m,3,2,numEq,numComp,8)]+=-4*B_0*w53 + B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,3,2,numEq,numComp,8)]+=-4*wB0 - 2*wB1 + 2*wB2;
6478                                          EM_S[INDEX4(k,m,3,3,numEq,numComp,8)]+=-4*B_0*w53 - B_1*w51 - B_2*w50;                                          EM_S[INDEX4(k,m,3,3,numEq,numComp,8)]+=-4*wB0 - 4*wB1 + 4*wB2;
6479                                          EM_S[INDEX4(k,m,3,4,numEq,numComp,8)]+=-B_0*w53 - B_1*w51/4 + B_2*w52/2;                                          EM_S[INDEX4(k,m,3,4,numEq,numComp,8)]+=  -wB0 -   wB1 +   wB2;
6480                                          EM_S[INDEX4(k,m,3,5,numEq,numComp,8)]+=-B_0*w53 + B_1*w49 + B_2*w52;                                          EM_S[INDEX4(k,m,3,5,numEq,numComp,8)]+=  -wB0 - 2*wB1 + 2*wB2;
6481                                          EM_S[INDEX4(k,m,3,6,numEq,numComp,8)]+=B_0*w48 - B_1*w51/4 + B_2*w52;                                          EM_S[INDEX4(k,m,3,6,numEq,numComp,8)]+=-2*wB0 -   wB1 + 2*wB2;
6482                                          EM_S[INDEX4(k,m,3,7,numEq,numComp,8)]+=B_0*w48 + B_1*w49 - B_2*w50;                                          EM_S[INDEX4(k,m,3,7,numEq,numComp,8)]+=-2*wB0 - 2*wB1 + 4*wB2;
6483                                          EM_S[INDEX4(k,m,4,0,numEq,numComp,8)]+=-B_0*w48 - B_1*w49 + B_2*w50;                                          EM_S[INDEX4(k,m,4,0,numEq,numComp,8)]+= 2*wB0 + 2*wB1 - 4*wB2;
6484                                          EM_S[INDEX4(k,m,4,1,numEq,numComp,8)]+=-B_0*w48 + B_1*w51/4 - B_2*w52;                                          EM_S[INDEX4(k,m,4,1,numEq,numComp,8)]+= 2*wB0 +   wB1 - 2*wB2;
6485                                          EM_S[INDEX4(k,m,4,2,numEq,numComp,8)]+=B_0*w53 - B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,4,2,numEq,numComp,8)]+=   wB0 + 2*wB1 - 2*wB2;
6486                                          EM_S[INDEX4(k,m,4,3,numEq,numComp,8)]+=B_0*w53 + B_1*w51/4 + B_2*w50/4;                                          EM_S[INDEX4(k,m,4,3,numEq,numComp,8)]+=   wB0 +   wB1 -   wB2;
6487                                          EM_S[INDEX4(k,m,4,4,numEq,numComp,8)]+=4*B_0*w53 + B_1*w51 + B_2*w50;                                          EM_S[INDEX4(k,m,4,4,numEq,numComp,8)]+= 4*wB0 + 4*wB1 - 4*wB2;
6488                                          EM_S[INDEX4(k,m,4,5,numEq,numComp,8)]+=4*B_0*w53 - B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,4,5,numEq,numComp,8)]+= 4*wB0 + 2*wB1 - 2*wB2;
6489                                          EM_S[INDEX4(k,m,4,6,numEq,numComp,8)]+=-B_0*w48 + B_1*w51 - B_2*w52;                                          EM_S[INDEX4(k,m,4,6,numEq,numComp,8)]+= 2*wB0 + 4*wB1 - 2*wB2;
6490                                          EM_S[INDEX4(k,m,4,7,numEq,numComp,8)]+=-B_0*w48 - B_1*w49 + B_2*w50/4;                                          EM_S[INDEX4(k,m,4,7,numEq,numComp,8)]+= 2*wB0 + 2*wB1 -   wB2;
6491                                          EM_S[INDEX4(k,m,5,0,numEq,numComp,8)]+=B_0*w48 + B_1*w51/4 - B_2*w52;                                          EM_S[INDEX4(k,m,5,0,numEq,numComp,8)]+=-2*wB0 +   wB1 - 2*wB2;
6492                                          EM_S[INDEX4(k,m,5,1,numEq,numComp,8)]+=B_0*w48 - B_1*w49 + B_2*w50;                                          EM_S[INDEX4(k,m,5,1,numEq,numComp,8)]+=-2*wB0 + 2*wB1 - 4*wB2;
6493                                          EM_S[INDEX4(k,m,5,2,numEq,numComp,8)]+=-B_0*w53 + B_1*w51/4 + B_2*w50/4;                                          EM_S[INDEX4(k,m,5,2,numEq,numComp,8)]+=  -wB0 +   wB1 -   wB2;
6494                                          EM_S[INDEX4(k,m,5,3,numEq,numComp,8)]+=-B_0*w53 - B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,5,3,numEq,numComp,8)]+=  -wB0 + 2*wB1 - 2*wB2;
6495                                          EM_S[INDEX4(k,m,5,4,numEq,numComp,8)]+=2*B_0*w48 - B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,5,4,numEq,numComp,8)]+=-4*wB0 + 2*wB1 - 2*wB2;
6496                                          EM_S[INDEX4(k,m,5,5,numEq,numComp,8)]+=-4*B_0*w53 + B_1*w51 + B_2*w50;                                          EM_S[INDEX4(k,m,5,5,numEq,numComp,8)]+=-4*wB0 + 4*wB1 - 4*wB2;
6497                                          EM_S[INDEX4(k,m,5,6,numEq,numComp,8)]+=B_0*w48 - B_1*w49 + B_2*w50/4;                                          EM_S[INDEX4(k,m,5,6,numEq,numComp,8)]+=-2*wB0 + 2*wB1 -   wB2;
6498                                          EM_S[INDEX4(k,m,5,7,numEq,numComp,8)]+=B_0*w48 + B_1*w51 - B_2*w52;                                          EM_S[INDEX4(k,m,5,7,numEq,numComp,8)]+=-2*wB0 + 4*wB1 - 2*wB2;
6499                                          EM_S[INDEX4(k,m,6,0,numEq,numComp,8)]+=B_0*w53 + B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,6,0,numEq,numComp,8)]+=   wB0 - 2*wB1 - 2*wB2;
6500                                          EM_S[INDEX4(k,m,6,1,numEq,numComp,8)]+=B_0*w53 - B_1*w51/4 + B_2*w50/4;                                          EM_S[INDEX4(k,m,6,1,numEq,numComp,8)]+=   wB0 -   wB1 -   wB2;
6501                                          EM_S[INDEX4(k,m,6,2,numEq,numComp,8)]+=-B_0*w48 + B_1*w49 + B_2*w50;                                          EM_S[INDEX4(k,m,6,2,numEq,numComp,8)]+= 2*wB0 - 2*wB1 - 4*wB2;
6502                                          EM_S[INDEX4(k,m,6,3,numEq,numComp,8)]+=-B_0*w48 - B_1*w51/4 - B_2*w52;                                          EM_S[INDEX4(k,m,6,3,numEq,numComp,8)]+= 2*wB0 -   wB1 - 2*wB2;
6503                                          EM_S[INDEX4(k,m,6,4,numEq,numComp,8)]+=-B_0*w48 - B_1*w51 - B_2*w52;                                          EM_S[INDEX4(k,m,6,4,numEq,numComp,8)]+= 2*wB0 - 4*wB1 - 2*wB2;
6504                                          EM_S[INDEX4(k,m,6,5,numEq,numComp,8)]+=-B_0*w48 + B_1*w49 + B_2*w50/4;                                          EM_S[INDEX4(k,m,6,5,numEq,numComp,8)]+= 2*wB0 - 2*wB1 -   wB2;
6505                                          EM_S[INDEX4(k,m,6,6,numEq,numComp,8)]+=4*B_0*w53 - B_1*w51 + B_2*w50;                                          EM_S[INDEX4(k,m,6,6,numEq,numComp,8)]+= 4*wB0 - 4*wB1 - 4*wB2;
6506                                          EM_S[INDEX4(k,m,6,7,numEq,numComp,8)]+=4*B_0*w53 + B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,6,7,numEq,numComp,8)]+= 4*wB0 - 2*wB1 - 2*wB2;
6507                                          EM_S[INDEX4(k,m,7,0,numEq,numComp,8)]+=-B_0*w53 - B_1*w51/4 + B_2*w50/4;                                          EM_S[INDEX4(k,m,7,0,numEq,numComp,8)]+=  -wB0 -   wB1 -   wB2;
6508                                          EM_S[INDEX4(k,m,7,1,numEq,numComp,8)]+=-B_0*w53 + B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,7,1,numEq,numComp,8)]+=  -wB0 - 2*wB1 - 2*wB2;
6509                                          EM_S[INDEX4(k,m,7,2,numEq,numComp,8)]+=B_0*w48 - B_1*w51/4 - B_2*w52;                                          EM_S[INDEX4(k,m,7,2,numEq,numComp,8)]+=-2*wB0 -   wB1 - 2*wB2;
6510                                          EM_S[INDEX4(k,m,7,3,numEq,numComp,8)]+=B_0*w48 + B_1*w49 + B_2*w50;                                          EM_S[INDEX4(k,m,7,3,numEq,numComp,8)]+=-2*wB0 - 2*wB1 - 4*wB2;
6511                                          EM_S[INDEX4(k,m,7,4,numEq,numComp,8)]+=B_0*w48 + B_1*w49 + B_2*w50/4;                                          EM_S[INDEX4(k,m,7,4,numEq,numComp,8)]+=-2*wB0 - 2*wB1 -   wB2;
6512                                          EM_S[INDEX4(k,m,7,5,numEq,numComp,8)]+=B_0*w48 - B_1*w51 - B_2*w52;                                          EM_S[INDEX4(k,m,7,5,numEq,numComp,8)]+=-2*wB0 - 4*wB1 - 2*wB2;
6513                                          EM_S[INDEX4(k,m,7,6,numEq,numComp,8)]+=-4*B_0*w53 + B_1*w49 - B_2*w52;                                          EM_S[INDEX4(k,m,7,6,numEq,numComp,8)]+=-4*wB0 - 2*wB1 - 2*wB2;
6514                                          EM_S[INDEX4(k,m,7,7,numEq,numComp,8)]+=-4*B_0*w53 - B_1*w51 + B_2*w50;                                          EM_S[INDEX4(k,m,7,7,numEq,numComp,8)]+=-4*wB0 - 4*wB1 - 4*wB2;
6515                                      }                                      }
6516                                  }                                  }
6517                              }                              }
# Line 6663  void Brick::assemblePDESystem(Paso_Syste Line 6549  void Brick::assemblePDESystem(Paso_Syste
6549                                          const double C_0_7 = C_p[INDEX4(k,m,0, 7, numEq,numComp,3)];                                          const double C_0_7 = C_p[INDEX4(k,m,0, 7, numEq,numComp,3)];
6550                                          const double C_1_7 = C_p[INDEX4(k,m,1, 7, numEq,numComp,3)];                                          const double C_1_7 = C_p[INDEX4(k,m,1, 7, numEq,numComp,3)];
6551                                          const double C_2_7 = C_p[INDEX4(k,m,2, 7, numEq,numComp,3)];                                          const double C_2_7 = C_p[INDEX4(k,m,2, 7, numEq,numComp,3)];
6552                                          const double tmp0 = w38*(C_0_3 + C_0_7);                                          const double tmp0 = w38*(-C_2_5 - C_2_6);
6553                                          const double tmp1 = w31*(C_1_0 + C_1_4);                                          const double tmp1 = w42*(C_1_3 + C_1_7);
6554                                          const double tmp2 = w42*(-C_2_1 - C_2_2);                                          const double tmp2 = w41*(C_0_3 + C_0_7);
6555                                          const double tmp3 = w35*(-C_2_5 - C_2_6);                                          const double tmp3 = w37*(C_1_1 + C_1_5);
6556                                          const double tmp4 = w37*(C_1_2 + C_1_6);                                          const double tmp4 = w39*(C_0_2 + C_0_6);
6557                                          const double tmp5 = w39*(C_1_3 + C_1_7);                                          const double tmp5 = w45*(-C_2_1 - C_2_2);
6558                                          const double tmp6 = w36*(C_0_2 + C_0_6);                                          const double tmp6 = w36*(C_0_1 + C_0_5);
6559                                          const double tmp7 = w33*(C_0_1 + C_0_5);                                          const double tmp7 = w40*(C_1_2 + C_1_6);
6560                                          const double tmp8 = w30*(C_0_0 + C_0_4);                                          const double tmp8 = w33*(C_0_0 + C_0_4);
6561                                          const double tmp9 = w34*(C_1_1 + C_1_5);                                          const double tmp9 = w34*(C_1_0 + C_1_4);
6562                                          const double tmp10 = w38*(C_0_4 + C_0_6);                                          const double tmp10 = w38*(C_2_4 + C_2_5 + C_2_6 + C_2_7);
6563                                          const double tmp11 = w31*(C_1_2 + C_1_3);                                          const double tmp11 = w42*(C_1_4 + C_1_5);
6564                                          const double tmp12 = w42*(C_2_0 + C_2_1 + C_2_2 + C_2_3);                                          const double tmp12 = w41*(C_0_4 + C_0_6);
6565                                          const double tmp13 = w35*(C_2_4 + C_2_5 + C_2_6 + C_2_7);                                          const double tmp13 = w37*(C_1_6 + C_1_7);
6566                                          const double tmp14 = w37*(C_1_0 + C_1_1);                                          const double tmp14 = w39*(C_0_5 + C_0_7);
6567                                          const double tmp15 = w39*(C_1_4 + C_1_5);                                          const double tmp15 = w45*(C_2_0 + C_2_1 + C_2_2 + C_2_3);
6568                                          const double tmp16 = w36*(C_0_5 + C_0_7);                                          const double tmp16 = w36*(C_0_0 + C_0_2);
6569                                          const double tmp17 = w33*(C_0_0 + C_0_2);                                          const double tmp17 = w40*(C_1_0 + C_1_1);
6570                                          const double tmp18 = w30*(C_0_1 + C_0_3);                                          const double tmp18 = w33*(C_0_1 + C_0_3);
6571                                          const double tmp19 = w34*(C_1_6 + C_1_7);                                          const double tmp19 = w34*(C_1_2 + C_1_3);
6572                                          const double tmp20 = w38*(C_0_1 + C_0_3);                                          const double tmp20 = w38*(-C_2_5 - C_2_7);
6573                                          const double tmp21 = w42*(-C_2_0 - C_2_2);                                          const double tmp21 = w35*(-C_2_4 - C_2_6);
6574                                          const double tmp22 = w35*(-C_2_5 - C_2_7);                                          const double tmp22 = w41*(C_0_1 + C_0_3);
6575                                          const double tmp23 = w37*(C_1_2 + C_1_7);                                          const double tmp23 = w37*(C_1_0 + C_1_5);
6576                                          const double tmp24 = w32*(-C_2_4 - C_2_6);                                          const double tmp24 = w39*(C_0_0 + C_0_2);
6577                                          const double tmp25 = w36*(C_0_0 + C_0_2);                                          const double tmp25 = w45*(-C_2_0 - C_2_2);
6578                                          const double tmp26 = w33*(C_0_5 + C_0_7);                                          const double tmp26 = w36*(C_0_5 + C_0_7);
6579                                          const double tmp27 = w30*(C_0_4 + C_0_6);                                          const double tmp27 = w40*(C_1_2 + C_1_7);
6580                                          const double tmp28 = w43*(-C_2_1 - C_2_3);                                          const double tmp28 = w33*(C_0_4 + C_0_6);
6581                                          const double tmp29 = w34*(C_1_0 + C_1_5);                                          const double tmp29 = w46*(-C_2_1 - C_2_3);
6582                                          const double tmp30 = w38*(-C_0_4 - C_0_6);                                          const double tmp30 = w38*(C_2_0 + C_2_2);
6583                                          const double tmp31 = w42*(C_2_5 + C_2_7);                                          const double tmp31 = w35*(C_2_1 + C_2_3);
6584                                          const double tmp32 = w35*(C_2_0 + C_2_2);                                          const double tmp32 = w41*(-C_0_4 - C_0_6);
6585                                          const double tmp33 = w37*(-C_1_0 - C_1_5);                                          const double tmp33 = w37*(-C_1_2 - C_1_7);
6586                                          const double tmp34 = w32*(C_2_1 + C_2_3);                                          const double tmp34 = w39*(-C_0_5 - C_0_7);
6587                                          const double tmp35 = w36*(-C_0_5 - C_0_7);                                          const double tmp35 = w45*(C_2_5 + C_2_7);
6588                                          const double tmp36 = w33*(-C_0_0 - C_0_2);                                          const double tmp36 = w36*(-C_0_0 - C_0_2);
6589                                          const double tmp37 = w30*(-C_0_1 - C_0_3);                                          const double tmp37 = w40*(-C_1_0 - C_1_5);
6590                                          const double tmp38 = w43*(C_2_4 + C_2_6);                                          const double tmp38 = w33*(-C_0_1 - C_0_3);
6591                                          const double tmp39 = w34*(-C_1_2 - C_1_7);                                          const double tmp39 = w46*(C_2_4 + C_2_6);
6592                                          const double tmp40 = w38*(-C_0_1 - C_0_3);                                          const double tmp40 = w38*(-C_2_0 - C_2_1 - C_2_2 - C_2_3);
6593                                          const double tmp41 = w31*(-C_1_4 - C_1_5);                                          const double tmp41 = w42*(-C_1_2 - C_1_3);
6594                                          const double tmp42 = w42*(-C_2_4 - C_2_5 - C_2_6 - C_2_7);                                          const double tmp42 = w41*(-C_0_1 - C_0_3);
6595                                          const double tmp43 = w35*(-C_2_0 - C_2_1 - C_2_2 - C_2_3);                                          const double tmp43 = w37*(-C_1_0 - C_1_1);
6596                                          const double tmp44 = w37*(-C_1_6 - C_1_7);                                          const double tmp44 = w39*(-C_0_0 - C_0_2);
6597                                          const double tmp45 = w39*(-C_1_2 - C_1_3);                                          const double tmp45 = w45*(-C_2_4 - C_2_5 - C_2_6 - C_2_7);
6598                                          const double tmp46 = w36*(-C_0_0 - C_0_2);                                          const double tmp46 = w36*(-C_0_5 - C_0_7);
6599                                          const double tmp47 = w33*(-C_0_5 - C_0_7);                                          const double tmp47 = w40*(-C_1_6 - C_1_7);
6600                                          const double tmp48 = w30*(-C_0_4 - C_0_6);                                          const double tmp48 = w33*(-C_0_4 - C_0_6);
6601                                          const double tmp49 = w34*(-C_1_0 - C_1_1);                                          const double tmp49 = w34*(-C_1_4 - C_1_5);
6602                                          const double tmp50 = w31*(-C_1_2 - C_1_3);                                          const double tmp50 = w38*(C_2_0 + C_2_1);
6603                                          const double tmp51 = w42*(C_2_6 + C_2_7);                                          const double tmp51 = w42*(-C_1_4 - C_1_5);
6604                                          const double tmp52 = w35*(C_2_0 + C_2_1);                                          const double tmp52 = w35*(C_2_2 + C_2_3);
6605                                          const double tmp53 = w37*(-C_1_0 - C_1_1);                                          const double tmp53 = w37*(-C_1_6 - C_1_7);
6606                                          const double tmp54 = w32*(C_2_2 + C_2_3);                                          const double tmp54 = w39*(-C_0_1 - C_0_7);
6607                                          const double tmp55 = w39*(-C_1_4 - C_1_5);                                          const double tmp55 = w45*(C_2_6 + C_2_7);
6608                                          const double tmp56 = w36*(-C_0_1 - C_0_7);                                          const double tmp56 = w36*(-C_0_0 - C_0_6);
6609                                          const double tmp57 = w33*(-C_0_0 - C_0_6);                                          const double tmp57 = w40*(-C_1_0 - C_1_1);
6610                                          const double tmp58 = w43*(C_2_4 + C_2_5);                                          const double tmp58 = w46*(C_2_4 + C_2_5);
6611                                          const double tmp59 = w34*(-C_1_6 - C_1_7);                                          const double tmp59 = w34*(-C_1_2 - C_1_3);
6612                                          const double tmp60 = w42*(C_2_4 + C_2_5 + C_2_6 + C_2_7);                                          const double tmp60 = w38*(C_2_0 + C_2_1 + C_2_2 + C_2_3);
6613                                          const double tmp61 = w35*(C_2_0 + C_2_1 + C_2_2 + C_2_3);                                          const double tmp61 = w37*(C_1_0 + C_1_1 + C_1_4 + C_1_5);
6614                                          const double tmp62 = w37*(C_1_2 + C_1_3 + C_1_6 + C_1_7);                                          const double tmp62 = w39*(C_0_0 + C_0_2 + C_0_4 + C_0_6);
6615                                          const double tmp63 = w36*(C_0_0 + C_0_2 + C_0_4 + C_0_6);                                          const double tmp63 = w45*(C_2_4 + C_2_5 + C_2_6 + C_2_7);
6616                                          const double tmp64 = w33*(C_0_1 + C_0_3 + C_0_5 + C_0_7);                                          const double tmp64 = w36*(C_0_1 + C_0_3 + C_0_5 + C_0_7);
6617                                          const double tmp65 = w34*(C_1_0 + C_1_1 + C_1_4 + C_1_5);                                          const double tmp65 = w40*(C_1_2 + C_1_3 + C_1_6 + C_1_7);
6618                                          const double tmp66 = w38*(-C_0_5 - C_0_7);                                          const double tmp66 = w41*(-C_0_5 - C_0_7);
6619                                          const double tmp67 = w36*(-C_0_4 - C_0_6);                                          const double tmp67 = w39*(-C_0_4 - C_0_6);
6620                                          const double tmp68 = w33*(-C_0_1 - C_0_3);                                          const double tmp68 = w36*(-C_0_1 - C_0_3);
6621                                          const double tmp69 = w30*(-C_0_0 - C_0_2);                                          const double tmp69 = w33*(-C_0_0 - C_0_2);
6622                                          const double tmp70 = w38*(-C_0_2 - C_0_6);                                          const double tmp70 = w38*(C_2_0 + C_2_3);
6623                                          const double tmp71 = w31*(C_1_1 + C_1_5);                                          const double tmp71 = w42*(C_1_2 + C_1_6);
6624                                          const double tmp72 = w42*(C_2_4 + C_2_7);                                          const double tmp72 = w41*(-C_0_2 - C_0_6);
6625                                          const double tmp73 = w35*(C_2_0 + C_2_3);                                          const double tmp73 = w37*(C_1_0 + C_1_4);
6626                                          const double tmp74 = w37*(C_1_3 + C_1_7);                                          const double tmp74 = w39*(-C_0_3 - C_0_7);
6627                                          const double tmp75 = w39*(C_1_2 + C_1_6);                                          const double tmp75 = w45*(C_2_4 + C_2_7);
6628                                          const double tmp76 = w36*(-C_0_3 - C_0_7);                                          const double tmp76 = w36*(-C_0_0 - C_0_4);
6629                                          const double tmp77 = w33*(-C_0_0 - C_0_4);                                          const double tmp77 = w40*(C_1_3 + C_1_7);
6630                                          const double tmp78 = w30*(-C_0_1 - C_0_5);                                          const double tmp78 = w33*(-C_0_1 - C_0_5);
6631                                          const double tmp79 = w34*(C_1_0 + C_1_4);                                          const double tmp79 = w34*(C_1_1 + C_1_5);
6632                                          const double tmp80 = w36*(-C_0_1 - C_0_3 - C_0_5 - C_0_7);                                          const double tmp80 = w39*(-C_0_1 - C_0_3 - C_0_5 - C_0_7);
6633                                          const double tmp81 = w33*(-C_0_0 - C_0_2 - C_0_4 - C_0_6);                                          const double tmp81 = w36*(-C_0_0 - C_0_2 - C_0_4 - C_0_6);
6634                                          const double tmp82 = w38*(C_0_1 + C_0_5);                                          const double tmp82 = w38*(-C_2_4 - C_2_7);
6635                                          const double tmp83 = w31*(-C_1_2 - C_1_6);                                          const double tmp83 = w42*(-C_1_1 - C_1_5);
6636                                          const double tmp84 = w42*(-C_2_0 - C_2_3);                                          const double tmp84 = w41*(C_0_1 + C_0_5);
6637                                          const double tmp85 = w35*(-C_2_4 - C_2_7);                                          const double tmp85 = w37*(-C_1_3 - C_1_7);
6638                                          const double tmp86 = w37*(-C_1_0 - C_1_4);                                          const double tmp86 = w39*(C_0_0 + C_0_4);
6639                                          const double tmp87 = w39*(-C_1_1 - C_1_5);                                          const double tmp87 = w45*(-C_2_0 - C_2_3);
6640                                          const double tmp88 = w36*(C_0_0 + C_0_4);                                          const double tmp88 = w36*(C_0_3 + C_0_7);
6641                                          const double tmp89 = w33*(C_0_3 + C_0_7);                                          const double tmp89 = w40*(-C_1_0 - C_1_4);
6642                                          const double tmp90 = w30*(C_0_2 + C_0_6);                                          const double tmp90 = w33*(C_0_2 + C_0_6);
6643                                          const double tmp91 = w34*(-C_1_3 - C_1_7);                                          const double tmp91 = w34*(-C_1_2 - C_1_6);
6644                                          const double tmp92 = w42*(C_2_5 + C_2_6);                                          const double tmp92 = w38*(C_2_1 + C_2_2);
6645                                          const double tmp93 = w35*(C_2_1 + C_2_2);                                          const double tmp93 = w45*(C_2_5 + C_2_6);
6646                                          const double tmp94 = w37*(-C_1_0 - C_1_1 - C_1_4 - C_1_5);                                          const double tmp94 = w37*(-C_1_2 - C_1_3 - C_1_6 - C_1_7);
6647                                          const double tmp95 = w34*(-C_1_2 - C_1_3 - C_1_6 - C_1_7);                                          const double tmp95 = w40*(-C_1_0 - C_1_1 - C_1_4 - C_1_5);
6648                                          const double tmp96 = w38*(C_0_0 + C_0_2);                                          const double tmp96 = w42*(C_1_0 + C_1_1);
6649                                          const double tmp97 = w31*(C_1_6 + C_1_7);                                          const double tmp97 = w41*(C_0_0 + C_0_2);
6650                                          const double tmp98 = w37*(C_1_4 + C_1_5);                                          const double tmp98 = w37*(C_1_2 + C_1_3);
6651                                          const double tmp99 = w39*(C_1_0 + C_1_1);                                          const double tmp99 = w39*(C_0_1 + C_0_3);
6652                                          const double tmp100 = w36*(C_0_1 + C_0_3);                                          const double tmp100 = w36*(C_0_4 + C_0_6);
6653                                          const double tmp101 = w33*(C_0_4 + C_0_6);                                          const double tmp101 = w40*(C_1_4 + C_1_5);
6654                                          const double tmp102 = w30*(C_0_5 + C_0_7);                                          const double tmp102 = w33*(C_0_5 + C_0_7);
6655                                          const double tmp103 = w34*(C_1_2 + C_1_3);                                          const double tmp103 = w34*(C_1_6 + C_1_7);
6656                                          const double tmp104 = w38*(-C_0_3 - C_0_7);                                          const double tmp104 = w38*(-C_2_2 - C_2_3);
6657                                          const double tmp105 = w42*(-C_2_4 - C_2_5);                                          const double tmp105 = w35*(-C_2_0 - C_2_1);
6658                                          const double tmp106 = w35*(-C_2_2 - C_2_3);                                          const double tmp106 = w41*(-C_0_3 - C_0_7);
6659                                          const double tmp107 = w37*(C_1_0 + C_1_1 + C_1_4 + C_1_5);                                          const double tmp107 = w37*(C_1_2 + C_1_3 + C_1_6 + C_1_7);
6660                                          const double tmp108 = w32*(-C_2_0 - C_2_1);                                          const double tmp108 = w39*(-C_0_2 - C_0_6);
6661                                          const double tmp109 = w36*(-C_0_2 - C_0_6);                                          const double tmp109 = w45*(-C_2_4 - C_2_5);
6662                                          const double tmp110 = w33*(-C_0_1 - C_0_5);                                          const double tmp110 = w36*(-C_0_1 - C_0_5);
6663                                          const double tmp111 = w30*(-C_0_0 - C_0_4);                                          const double tmp111 = w40*(C_1_0 + C_1_1 + C_1_4 + C_1_5);
6664                                          const double tmp112 = w43*(-C_2_6 - C_2_7);                                          const double tmp112 = w33*(-C_0_0 - C_0_4);
6665                                          const double tmp113 = w34*(C_1_2 + C_1_3 + C_1_6 + C_1_7);                                          const double tmp113 = w46*(-C_2_6 - C_2_7);
6666                                          const double tmp114 = w38*(-C_0_0 - C_0_4);                                          const double tmp114 = w42*(-C_1_0 - C_1_4);
6667                                          const double tmp115 = w31*(-C_1_3 - C_1_7);                                          const double tmp115 = w41*(-C_0_0 - C_0_4);
6668                                          const double tmp116 = w37*(-C_1_1 - C_1_5);                                          const double tmp116 = w37*(-C_1_2 - C_1_6);
6669   &n