diff --git a/AMDiS/src/Assembler.cc b/AMDiS/src/Assembler.cc index dfc72f4b066157815bf9f50036991c217c7121a1..03e16e3e7d7a88170b943c5e950eb8750ad3e43b 100644 --- a/AMDiS/src/Assembler.cc +++ b/AMDiS/src/Assembler.cc @@ -120,23 +120,39 @@ namespace AMDiS { } if (firstOrderAssemblerGrdPsi) { + firstOrderAssemblerGrdPsi->calculateElementMatrix(smallElInfo, mat); + if (largeElInfo == colElInfo) { - ERROR_EXIT("123 Not yet implemented for first order assembler!\n"); - } else { - firstOrderAssemblerGrdPsi->calculateElementMatrix(smallElInfo, mat); + ElementMatrix &m = + smallElInfo->getSubElemGradCoordsMat(rowFESpace->getBasisFcts()->getDegree()); + tmpMat = m * mat; + } else { ElementMatrix &m = smallElInfo->getSubElemCoordsMat(rowFESpace->getBasisFcts()->getDegree()); tmpMat = mat * trans(m); - - mat = tmpMat; } + + mat = tmpMat; } if (firstOrderAssemblerGrdPhi) { - ERROR_EXIT("Not yet implemented for first order assembler!\n"); firstOrderAssemblerGrdPhi->calculateElementMatrix(smallElInfo, mat); + + if (largeElInfo == rowElInfo) { + ElementMatrix &m = + smallElInfo->getSubElemGradCoordsMat(rowFESpace->getBasisFcts()->getDegree()); + + tmpMat = mat * trans(m); + } else { + ElementMatrix &m = + smallElInfo->getSubElemCoordsMat(rowFESpace->getBasisFcts()->getDegree()); + + tmpMat = m * mat; + } + + mat = tmpMat; } if (zeroOrderAssembler) {