Commit 6eda4c4f authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

* Assembler now faster for dendrite code

parent f615ae6e
...@@ -122,7 +122,7 @@ namespace AMDiS { ...@@ -122,7 +122,7 @@ namespace AMDiS {
{ {
Quadrature *localQuad = quad ? quad : quadrature; Quadrature *localQuad = quad ? quad : quadrature;
const int numPoints = localQuad->getNumPoints(); const int nPoints = localQuad->getNumPoints();
// already calculated for this element ? // already calculated for this element ?
if (coordsValid) { if (coordsValid) {
...@@ -130,19 +130,19 @@ namespace AMDiS { ...@@ -130,19 +130,19 @@ namespace AMDiS {
} }
if (coordsAtQPs) { if (coordsAtQPs) {
if (coordsNumAllocated != numPoints) { if (coordsNumAllocated != nPoints) {
DELETE [] coordsAtQPs; DELETE [] coordsAtQPs;
coordsAtQPs = NEW WorldVector<double>[numPoints]; coordsAtQPs = NEW WorldVector<double>[nPoints];
coordsNumAllocated = numPoints; coordsNumAllocated = nPoints;
} }
} else { } else {
coordsAtQPs = NEW WorldVector<double>[numPoints]; coordsAtQPs = NEW WorldVector<double>[nPoints];
coordsNumAllocated = numPoints; coordsNumAllocated = nPoints;
} }
// set new values // set new values
WorldVector<double>* k = &(coordsAtQPs[0]); WorldVector<double>* k = &(coordsAtQPs[0]);
for (int l = 0; k < &(coordsAtQPs[numPoints]); ++k, ++l) { for (int l = 0; k < &(coordsAtQPs[nPoints]); ++k, ++l) {
elInfo->coordToWorld(localQuad->getLambda(l), k); elInfo->coordToWorld(localQuad->getLambda(l), k);
} }
...@@ -223,7 +223,7 @@ namespace AMDiS { ...@@ -223,7 +223,7 @@ namespace AMDiS {
Quadrature *localQuad = quad ? quad : quadrature; Quadrature *localQuad = quad ? quad : quadrature;
if(!gradientsAtQPs[vec]) { if (!gradientsAtQPs[vec]) {
gradientsAtQPs[vec] = new GradientsAtQPs; gradientsAtQPs[vec] = new GradientsAtQPs;
} }
gradientsAtQPs[vec]->values.resize(localQuad->getNumPoints()); gradientsAtQPs[vec]->values.resize(localQuad->getNumPoints());
...@@ -249,7 +249,7 @@ namespace AMDiS { ...@@ -249,7 +249,7 @@ namespace AMDiS {
const BasisFunction *basFcts = vec->getFESpace()->getBasisFcts(); const BasisFunction *basFcts = vec->getFESpace()->getBasisFcts();
if (opt && !quad && sameFESpaces) { if (opt && !quad && sameFESpaces) {
if(psiFast->getBasisFunctions() == basFcts) { if (psiFast->getBasisFunctions() == basFcts) {
vec->getGrdAtQPs(elInfo, NULL, psiFast, values); vec->getGrdAtQPs(elInfo, NULL, psiFast, values);
} else { } else {
vec->getGrdAtQPs(elInfo, NULL, phiFast, values); vec->getGrdAtQPs(elInfo, NULL, phiFast, values);
...@@ -500,21 +500,21 @@ namespace AMDiS { ...@@ -500,21 +500,21 @@ namespace AMDiS {
double psival; double psival;
double *phival = GET_MEMORY(double, nCol); double *phival = GET_MEMORY(double, nCol);
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
double *c = GET_MEMORY(double, numPoints); double *c = GET_MEMORY(double, nPoints);
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] = 0.0; c[iq] = 0.0;
} }
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
::std::vector<OperatorTerm*>::iterator termIt; ::std::vector<OperatorTerm*>::iterator termIt;
for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) { for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) {
(static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, numPoints, c); (static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, nPoints, c);
} }
if (symmetric) { if (symmetric) {
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] *= elInfo->getDet(); c[iq] *= elInfo->getDet();
// calculate phi at QPs only once! // calculate phi at QPs only once!
...@@ -533,7 +533,7 @@ namespace AMDiS { ...@@ -533,7 +533,7 @@ namespace AMDiS {
} }
} }
} else { // non symmetric assembling } else { // non symmetric assembling
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] *= elInfo->getDet(); c[iq] *= elInfo->getDet();
// calculate phi at QPs only once! // calculate phi at QPs only once!
...@@ -551,26 +551,26 @@ namespace AMDiS { ...@@ -551,26 +551,26 @@ namespace AMDiS {
} }
FREE_MEMORY(phival, double, nCol); FREE_MEMORY(phival, double, nCol);
FREE_MEMORY(c, double, numPoints); FREE_MEMORY(c, double, nPoints);
} }
void Stand0::calculateElementVector(const ElInfo *elInfo, ElementVector *vec) void Stand0::calculateElementVector(const ElInfo *elInfo, ElementVector *vec)
{ {
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
double *c = GET_MEMORY(double, numPoints); double *c = GET_MEMORY(double, nPoints);
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] = 0.0; c[iq] = 0.0;
} }
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
::std::vector<OperatorTerm*>::iterator termIt; ::std::vector<OperatorTerm*>::iterator termIt;
for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) { for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) {
(static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, numPoints, c); (static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, nPoints, c);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] *= elInfo->getDet(); c[iq] *= elInfo->getDet();
for (int i = 0; i < nRow; i++) { for (int i = 0; i < nRow; i++) {
...@@ -580,19 +580,29 @@ namespace AMDiS { ...@@ -580,19 +580,29 @@ namespace AMDiS {
} }
} }
FREE_MEMORY(c, double, numPoints); FREE_MEMORY(c, double, nPoints);
} }
Quad0::Quad0(Operator *op, Assembler *assembler, Quadrature *quad) Quad0::Quad0(Operator *op, Assembler *assembler, Quadrature *quad)
: ZeroOrderAssembler(op, assembler, quad, true) : ZeroOrderAssembler(op, assembler, quad, true)
{ {
cPtrs.resize(omp_get_max_threads());
}
Quad0::~Quad0()
{
for (int i = 0; i < omp_get_max_threads(); i++) {
FREE_MEMORY(cPtrs[i], double, quadrature->getNumPoints());
}
} }
void Quad0::calculateElementMatrix(const ElInfo *elInfo, ElementMatrix *mat) void Quad0::calculateElementMatrix(const ElInfo *elInfo, ElementMatrix *mat)
{ {
const double *psi, *phi; int nPoints = quadrature->getNumPoints();
int myRank = omp_get_thread_num();
if (firstCall) { if (firstCall) {
cPtrs[myRank] = GET_MEMORY(double, nPoints);
const BasisFunction *basFcts = owner->getRowFESpace()->getBasisFcts(); const BasisFunction *basFcts = owner->getRowFESpace()->getBasisFcts();
psiFast = updateFastQuadrature(psiFast, basFcts, INIT_PHI); psiFast = updateFastQuadrature(psiFast, basFcts, INIT_PHI);
basFcts = owner->getColFESpace()->getBasisFcts(); basFcts = owner->getColFESpace()->getBasisFcts();
...@@ -600,25 +610,22 @@ namespace AMDiS { ...@@ -600,25 +610,22 @@ namespace AMDiS {
firstCall = false; firstCall = false;
} }
int numPoints = quadrature->getNumPoints(); double *c = cPtrs[myRank];
double *c = GET_MEMORY(double, numPoints); for (int iq = 0; iq < nPoints; iq++) {
for (int iq = 0; iq < numPoints; iq++) {
c[iq] = 0.0; c[iq] = 0.0;
} }
int myRank = omp_get_thread_num();
::std::vector<OperatorTerm*>::iterator termIt; ::std::vector<OperatorTerm*>::iterator termIt;
for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) { for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) {
(static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, numPoints, c); (static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, nPoints, c);
} }
if (symmetric) { if (symmetric) {
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] *= elInfo->getDet(); c[iq] *= elInfo->getDet();
psi = psiFast->getPhi(iq); const double *psi = psiFast->getPhi(iq);
phi = phiFast->getPhi(iq); const double *phi = phiFast->getPhi(iq);
for (int i = 0; i < nRow; i++) { for (int i = 0; i < nRow; i++) {
(*mat)[i][i] += quadrature->getWeight(iq) * c[iq] * psi[i] * phi[i]; (*mat)[i][i] += quadrature->getWeight(iq) * c[iq] * psi[i] * phi[i];
for (int j = i + 1; j < nCol; j++) { for (int j = i + 1; j < nCol; j++) {
...@@ -629,11 +636,11 @@ namespace AMDiS { ...@@ -629,11 +636,11 @@ namespace AMDiS {
} }
} }
} else { /* non symmetric assembling */ } else { /* non symmetric assembling */
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] *= elInfo->getDet(); c[iq] *= elInfo->getDet();
psi = psiFast->getPhi(iq); const double *psi = psiFast->getPhi(iq);
phi = phiFast->getPhi(iq); const double *phi = phiFast->getPhi(iq);
for (int i = 0; i < nRow; i++) { for (int i = 0; i < nRow; i++) {
for (int j = 0; j < nCol; j++) { for (int j = 0; j < nCol; j++) {
(*mat)[i][j] += quadrature->getWeight(iq) * c[iq] * psi[i] * phi[j]; (*mat)[i][j] += quadrature->getWeight(iq) * c[iq] * psi[i] * phi[j];
...@@ -641,7 +648,6 @@ namespace AMDiS { ...@@ -641,7 +648,6 @@ namespace AMDiS {
} }
} }
} }
FREE_MEMORY(c, double, numPoints);
} }
void Quad0::calculateElementVector(const ElInfo *elInfo, ElementVector *vec) void Quad0::calculateElementVector(const ElInfo *elInfo, ElementVector *vec)
...@@ -654,20 +660,20 @@ namespace AMDiS { ...@@ -654,20 +660,20 @@ namespace AMDiS {
firstCall = false; firstCall = false;
} }
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
double *c = GET_MEMORY(double, numPoints); double *c = GET_MEMORY(double, nPoints);
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] = 0.0; c[iq] = 0.0;
} }
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
::std::vector<OperatorTerm*>::iterator termIt; ::std::vector<OperatorTerm*>::iterator termIt;
for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) { for (termIt = terms[myRank].begin(); termIt != terms[myRank].end(); ++termIt) {
(static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, numPoints, c); (static_cast<ZeroOrderTerm*>((*termIt)))->getC(elInfo, nPoints, c);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
c[iq] *= elInfo->getDet(); c[iq] *= elInfo->getDet();
const double *psi = psiFast->getPhi(iq); const double *psi = psiFast->getPhi(iq);
...@@ -675,7 +681,7 @@ namespace AMDiS { ...@@ -675,7 +681,7 @@ namespace AMDiS {
(*vec)[i] += quadrature->getWeight(iq) * c[iq] * psi[i]; (*vec)[i] += quadrature->getWeight(iq) * c[iq] * psi[i];
} }
} }
FREE_MEMORY(c, double, numPoints); FREE_MEMORY(c, double, nPoints);
} }
Pre0::Pre0(Operator *op, Assembler *assembler, Quadrature *quad) Pre0::Pre0(Operator *op, Assembler *assembler, Quadrature *quad)
...@@ -759,19 +765,19 @@ namespace AMDiS { ...@@ -759,19 +765,19 @@ namespace AMDiS {
const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts(); const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts();
const BasisFunction *phi = owner->getColFESpace()->getBasisFcts(); const BasisFunction *phi = owner->getColFESpace()->getBasisFcts();
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
VectorOfFixVecs<DimVec<double> > Lb(dim, numPoints, NO_INIT); VectorOfFixVecs<DimVec<double> > Lb(dim, nPoints, NO_INIT);
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq].set(0.0); Lb[iq].set(0.0);
} }
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) { for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) {
(static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, numPoints, Lb); (static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, nPoints, Lb);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq] *= elInfo->getDet(); Lb[iq] *= elInfo->getDet();
for (int i = 0; i < nCol; i++) { for (int i = 0; i < nCol; i++) {
...@@ -808,19 +814,19 @@ namespace AMDiS { ...@@ -808,19 +814,19 @@ namespace AMDiS {
firstCall = false; firstCall = false;
} }
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT);
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq].set(0.0); Lb[iq].set(0.0);
} }
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) { for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) {
(static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, numPoints, Lb); (static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, nPoints, Lb);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq] *= elInfo->getDet(); Lb[iq] *= elInfo->getDet();
phi = phiFast->getPhi(iq); phi = phiFast->getPhi(iq);
...@@ -891,18 +897,18 @@ namespace AMDiS { ...@@ -891,18 +897,18 @@ namespace AMDiS {
const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts(); const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts();
const BasisFunction *phi = owner->getColFESpace()->getBasisFcts(); const BasisFunction *phi = owner->getColFESpace()->getBasisFcts();
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
VectorOfFixVecs<DimVec<double> > Lb(dim, numPoints, NO_INIT); VectorOfFixVecs<DimVec<double> > Lb(dim, nPoints, NO_INIT);
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq].set(0.0); Lb[iq].set(0.0);
} }
for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) { for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) {
(static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, numPoints, Lb); (static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, nPoints, Lb);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq] *= elInfo->getDet(); Lb[iq] *= elInfo->getDet();
for (int i = 0; i < nCol; i++) { for (int i = 0; i < nCol; i++) {
...@@ -921,18 +927,18 @@ namespace AMDiS { ...@@ -921,18 +927,18 @@ namespace AMDiS {
{ {
DimVec<double> grdPsi(dim, DEFAULT_VALUE, 0.0); DimVec<double> grdPsi(dim, DEFAULT_VALUE, 0.0);
const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts(); const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts();
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT);
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq].set(0.0); Lb[iq].set(0.0);
} }
for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) { for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) {
(static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, numPoints, Lb); (static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, nPoints, Lb);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq] *= elInfo->getDet(); Lb[iq] *= elInfo->getDet();
for (int i = 0; i < nRow; i++) { for (int i = 0; i < nRow; i++) {
...@@ -959,18 +965,18 @@ namespace AMDiS { ...@@ -959,18 +965,18 @@ namespace AMDiS {
firstCall = false; firstCall = false;
} }
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT);
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq].set(0.0); Lb[iq].set(0.0);
} }
for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) { for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) {
(static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, numPoints, Lb); (static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, nPoints, Lb);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq] *= elInfo->getDet(); Lb[iq] *= elInfo->getDet();
const double *psi = psiFast->getPhi(iq); const double *psi = psiFast->getPhi(iq);
...@@ -995,18 +1001,18 @@ namespace AMDiS { ...@@ -995,18 +1001,18 @@ namespace AMDiS {
firstCall = false; firstCall = false;
} }
int numPoints = quadrature->getNumPoints(); int nPoints = quadrature->getNumPoints();
VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT);
int myRank = omp_get_thread_num(); int myRank = omp_get_thread_num();
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq].set(0.0); Lb[iq].set(0.0);
} }
for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) { for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) {
(static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, numPoints, Lb); (static_cast<FirstOrderTerm*>((terms[myRank][i])))->getLb(elInfo, nPoints, Lb);
} }
for (int iq = 0; iq < numPoints; iq++) { for (int iq = 0; iq < nPoints; iq++) {
Lb[iq] *= elInfo->getDet(); Lb[iq] *= elInfo->getDet();
grdPsi = psiFast->getGradient(iq); grdPsi = psiFast->getGradient(iq);
...@@ -1179,14 +1185,32 @@ namespace AMDiS { ...@@ -1179,14 +1185,32 @@ namespace AMDiS {
Quad2::Quad2(Operator *op, Assembler *assembler, Quadrature *quad) Quad2::Quad2(Operator *op, Assembler *assembler, Quadrature *quad)
: SecondOrderAssembler(op, assembler, quad, true) : SecondOrderAssembler(op, assembler, quad, true)
{} {
tmpLALt.resize(omp_get_max_threads());
}
Quad2::~Quad2()
{
int nPoints = quadrature->getNumPoints();
for (int i = 0; i < static_cast<int>(tmpLALt.size()); i++) {
for (int j = 0; j < nPoints; j++) {
DELETE tmpLALt[i][j];
}
DELETE [] tmpLALt[i];
}
}
void Quad2::calculateElementMatrix(const ElInfo *elInfo, ElementMatrix *mat) void Quad2::calculateElementMatrix(const ElInfo *elInfo, ElementMatrix *mat)
{ {
double val; int nPoints = quadrature->getNumPoints();
VectorOfFixVecs<DimVec<double> > *grdPsi, *grdPhi; int myRank = omp_get_thread_num();
if (firstCall) { if (firstCall) {
tmpLALt[myRank] = NEW DimMat<double>*[nPoints];
for (int j = 0; j < nPoints; j++) {
tmpLALt[myRank][j] = NEW DimMat<double>(dim, NO_INIT);
}
const BasisFunction *basFcts = owner->getRowFESpace()->getBasisFcts(); const BasisFunction *basFcts = owner->getRowFESpace()->getBasisFcts();
psiFast = updateFastQuadrature(psiFast, basFcts, INIT_GRD_PHI); psiFast = updateFastQuadrature(psiFast, basFcts, INIT_GRD_PHI);
basFcts = owner->getColFESpace()->getBasisFcts(); basFcts = owner->getColFESpace()->getBasisFcts();
...@@ -1194,20 +1218,18 @@ namespace AMDiS { ...@@ -1194,20 +1218,18 @@ namespace AMDiS {
firstCall = false; firstCall = false;