diff --git a/Solver/femTerm.h b/Solver/femTerm.h index b0ebaf69c8677e3dfc4923336ff234e5b0d4a3a1..77ba2b55dab73ec37b72b90b97a220b0d5e65e0c 100644 --- a/Solver/femTerm.h +++ b/Solver/femTerm.h @@ -75,23 +75,40 @@ class femTerm { { const int nbR = localMatrix.size1(); const int nbC = localMatrix.size2(); - std::vector<Dof> R,C; - for (int j = 0; j < nbR; j++) - R.push_back(getLocalDofR(se, j)); - for (int k = 0; k < nbC; k++) - C.push_back(getLocalDofC(se, k)); - + std::vector<Dof> R,C; // better use default consdtructors and reserve the right amount of space to avoid reallocation + R.reserve(nbR); + C.reserve(nbC); + bool sym=true; + if (nbR == nbC) + { + for (int j = 0; j < nbR; j++) + { + Dof r(getLocalDofR(se, j)); + Dof c(getLocalDofC(se, j)); + R.push_back(r); + C.push_back(c); + if (!(r==c)) sym=false; + } + } + else + { + sym=false; + for (int j = 0; j < nbR; j++) + R.push_back(getLocalDofR(se, j)); + for (int k = 0; k < nbC; k++) + C.push_back(getLocalDofC(se, k)); + } /* for (int i = 0; i < nbC; i++) */ /* for (int j = 0; j < nbR; j++) */ /* dm.assemble(getLocalDofR(se, i), getLocalDofC(se, j), localMatrix(i,j)); */ /* return; */ - bool sym = true; - if (nbR == nbC){ - for (int i=0;i<nbR;i++) - if (!(C[i] == R[i]))sym = false; - } - else sym = false; + +// if (nbR == nbC){ +// for (int i=0;i<nbR;i++) +// if (!(C[i] == R[i]))sym = false; +// } +// else sym = false; if (!sym) dm.assemble(R, C, localMatrix); else