diff --git a/AMDiS/src/Assembler.cc b/AMDiS/src/Assembler.cc index 044632a02c2052cab572c6846197f3b652e4eae9..7686e186e1237207efc3aba1987f0a38570c6948 100644 --- a/AMDiS/src/Assembler.cc +++ b/AMDiS/src/Assembler.cc @@ -122,7 +122,7 @@ namespace AMDiS { { Quadrature *localQuad = quad ? quad : quadrature; - const int numPoints = localQuad->getNumPoints(); + const int nPoints = localQuad->getNumPoints(); // already calculated for this element ? if (coordsValid) { @@ -130,19 +130,19 @@ namespace AMDiS { } if (coordsAtQPs) { - if (coordsNumAllocated != numPoints) { + if (coordsNumAllocated != nPoints) { DELETE [] coordsAtQPs; - coordsAtQPs = NEW WorldVector<double>[numPoints]; - coordsNumAllocated = numPoints; + coordsAtQPs = NEW WorldVector<double>[nPoints]; + coordsNumAllocated = nPoints; } } else { - coordsAtQPs = NEW WorldVector<double>[numPoints]; - coordsNumAllocated = numPoints; + coordsAtQPs = NEW WorldVector<double>[nPoints]; + coordsNumAllocated = nPoints; } // set new values 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); } @@ -223,7 +223,7 @@ namespace AMDiS { Quadrature *localQuad = quad ? quad : quadrature; - if(!gradientsAtQPs[vec]) { + if (!gradientsAtQPs[vec]) { gradientsAtQPs[vec] = new GradientsAtQPs; } gradientsAtQPs[vec]->values.resize(localQuad->getNumPoints()); @@ -249,7 +249,7 @@ namespace AMDiS { const BasisFunction *basFcts = vec->getFESpace()->getBasisFcts(); if (opt && !quad && sameFESpaces) { - if(psiFast->getBasisFunctions() == basFcts) { + if (psiFast->getBasisFunctions() == basFcts) { vec->getGrdAtQPs(elInfo, NULL, psiFast, values); } else { vec->getGrdAtQPs(elInfo, NULL, phiFast, values); @@ -500,21 +500,21 @@ namespace AMDiS { double psival; double *phival = GET_MEMORY(double, nCol); - int numPoints = quadrature->getNumPoints(); - double *c = GET_MEMORY(double, numPoints); + int nPoints = quadrature->getNumPoints(); + double *c = GET_MEMORY(double, nPoints); - for (int iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < nPoints; iq++) { c[iq] = 0.0; } int myRank = omp_get_thread_num(); ::std::vector<OperatorTerm*>::iterator 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) { - for (int iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < nPoints; iq++) { c[iq] *= elInfo->getDet(); // calculate phi at QPs only once! @@ -533,7 +533,7 @@ namespace AMDiS { } } } else { // non symmetric assembling - for (int iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < nPoints; iq++) { c[iq] *= elInfo->getDet(); // calculate phi at QPs only once! @@ -551,26 +551,26 @@ namespace AMDiS { } FREE_MEMORY(phival, double, nCol); - FREE_MEMORY(c, double, numPoints); + FREE_MEMORY(c, double, nPoints); } 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; } int myRank = omp_get_thread_num(); ::std::vector<OperatorTerm*>::iterator 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(); for (int i = 0; i < nRow; i++) { @@ -580,19 +580,29 @@ namespace AMDiS { } } - FREE_MEMORY(c, double, numPoints); + FREE_MEMORY(c, double, nPoints); } Quad0::Quad0(Operator *op, Assembler *assembler, Quadrature *quad) : 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) { - const double *psi, *phi; + int nPoints = quadrature->getNumPoints(); + int myRank = omp_get_thread_num(); if (firstCall) { + cPtrs[myRank] = GET_MEMORY(double, nPoints); const BasisFunction *basFcts = owner->getRowFESpace()->getBasisFcts(); psiFast = updateFastQuadrature(psiFast, basFcts, INIT_PHI); basFcts = owner->getColFESpace()->getBasisFcts(); @@ -600,25 +610,22 @@ namespace AMDiS { firstCall = false; } - int numPoints = quadrature->getNumPoints(); - double *c = GET_MEMORY(double, numPoints); - - for (int iq = 0; iq < numPoints; iq++) { + double *c = cPtrs[myRank]; + for (int iq = 0; iq < nPoints; iq++) { c[iq] = 0.0; } - int myRank = omp_get_thread_num(); ::std::vector<OperatorTerm*>::iterator 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) { - for (int iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < nPoints; iq++) { c[iq] *= elInfo->getDet(); - psi = psiFast->getPhi(iq); - phi = phiFast->getPhi(iq); + const double *psi = psiFast->getPhi(iq); + const double *phi = phiFast->getPhi(iq); for (int i = 0; i < nRow; i++) { (*mat)[i][i] += quadrature->getWeight(iq) * c[iq] * psi[i] * phi[i]; for (int j = i + 1; j < nCol; j++) { @@ -629,11 +636,11 @@ namespace AMDiS { } } } else { /* non symmetric assembling */ - for (int iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < nPoints; iq++) { c[iq] *= elInfo->getDet(); - psi = psiFast->getPhi(iq); - phi = phiFast->getPhi(iq); + const double *psi = psiFast->getPhi(iq); + const double *phi = phiFast->getPhi(iq); for (int i = 0; i < nRow; i++) { for (int j = 0; j < nCol; j++) { (*mat)[i][j] += quadrature->getWeight(iq) * c[iq] * psi[i] * phi[j]; @@ -641,7 +648,6 @@ namespace AMDiS { } } } - FREE_MEMORY(c, double, numPoints); } void Quad0::calculateElementVector(const ElInfo *elInfo, ElementVector *vec) @@ -654,20 +660,20 @@ namespace AMDiS { firstCall = false; } - int numPoints = quadrature->getNumPoints(); - double *c = GET_MEMORY(double, numPoints); + int nPoints = quadrature->getNumPoints(); + double *c = GET_MEMORY(double, nPoints); - for (int iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < nPoints; iq++) { c[iq] = 0.0; } int myRank = omp_get_thread_num(); ::std::vector<OperatorTerm*>::iterator 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(); const double *psi = psiFast->getPhi(iq); @@ -675,7 +681,7 @@ namespace AMDiS { (*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) @@ -759,19 +765,19 @@ namespace AMDiS { const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts(); const BasisFunction *phi = owner->getColFESpace()->getBasisFcts(); - int numPoints = quadrature->getNumPoints(); + int nPoints = quadrature->getNumPoints(); - VectorOfFixVecs<DimVec<double> > Lb(dim, numPoints, NO_INIT); - for (int iq = 0; iq < numPoints; iq++) { + VectorOfFixVecs<DimVec<double> > Lb(dim, nPoints, NO_INIT); + for (int iq = 0; iq < nPoints; iq++) { Lb[iq].set(0.0); } int myRank = omp_get_thread_num(); 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(); for (int i = 0; i < nCol; i++) { @@ -808,19 +814,19 @@ namespace AMDiS { firstCall = false; } - int numPoints = quadrature->getNumPoints(); + int nPoints = quadrature->getNumPoints(); - VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); - for (int iq = 0; iq < numPoints; iq++) { + VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT); + for (int iq = 0; iq < nPoints; iq++) { Lb[iq].set(0.0); } int myRank = omp_get_thread_num(); 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(); phi = phiFast->getPhi(iq); @@ -891,18 +897,18 @@ namespace AMDiS { const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts(); const BasisFunction *phi = owner->getColFESpace()->getBasisFcts(); - int numPoints = quadrature->getNumPoints(); - VectorOfFixVecs<DimVec<double> > Lb(dim, numPoints, NO_INIT); + int nPoints = quadrature->getNumPoints(); + VectorOfFixVecs<DimVec<double> > Lb(dim, nPoints, NO_INIT); 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); } 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(); for (int i = 0; i < nCol; i++) { @@ -921,18 +927,18 @@ namespace AMDiS { { DimVec<double> grdPsi(dim, DEFAULT_VALUE, 0.0); const BasisFunction *psi = owner->getRowFESpace()->getBasisFcts(); - int numPoints = quadrature->getNumPoints(); - VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); + int nPoints = quadrature->getNumPoints(); + VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT); 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); } 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(); for (int i = 0; i < nRow; i++) { @@ -959,18 +965,18 @@ namespace AMDiS { firstCall = false; } - int numPoints = quadrature->getNumPoints(); - VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); + int nPoints = quadrature->getNumPoints(); + VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT); 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); } 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(); const double *psi = psiFast->getPhi(iq); @@ -995,18 +1001,18 @@ namespace AMDiS { firstCall = false; } - int numPoints = quadrature->getNumPoints(); - VectorOfFixVecs<DimVec<double> > Lb(dim,numPoints,NO_INIT); + int nPoints = quadrature->getNumPoints(); + VectorOfFixVecs<DimVec<double> > Lb(dim,nPoints,NO_INIT); 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); } 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(); grdPsi = psiFast->getGradient(iq); @@ -1179,14 +1185,32 @@ namespace AMDiS { Quad2::Quad2(Operator *op, Assembler *assembler, Quadrature *quad) : 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) { - double val; - VectorOfFixVecs<DimVec<double> > *grdPsi, *grdPhi; + int nPoints = quadrature->getNumPoints(); + int myRank = omp_get_thread_num(); 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(); psiFast = updateFastQuadrature(psiFast, basFcts, INIT_GRD_PHI); basFcts = owner->getColFESpace()->getBasisFcts(); @@ -1194,20 +1218,18 @@ namespace AMDiS { firstCall = false; } - int nPoints = quadrature->getNumPoints(); - DimMat<double> **LALt = NEW DimMat<double>*[nPoints]; - int myRank = omp_get_thread_num(); + DimMat<double> **LALt = tmpLALt[myRank]; - for (int i = 0; i < nPoints;i++) { - LALt[i] = NEW DimMat<double>(dim, NO_INIT); - } - for (int iq = 0; iq < nPoints; iq++) { - LALt[iq]->set(0.0); + for (int i = 0; i < nPoints; i++) { + LALt[i]->set(0.0); } + for (int i = 0; i < static_cast<int>(terms[myRank].size()); i++) { (static_cast<SecondOrderTerm*>(terms[myRank][i]))->getLALt(elInfo, nPoints, LALt); } + VectorOfFixVecs<DimVec<double> > *grdPsi, *grdPhi; + if (symmetric) { for (int iq = 0; iq < nPoints; iq++) { (*LALt[iq]) *= elInfo->getDet(); @@ -1220,14 +1242,13 @@ namespace AMDiS { ((*grdPsi)[i] * ((*LALt[iq]) * (*grdPhi)[i])); for (int j = i + 1; j < nCol; j++) { - val = quadrature->getWeight(iq) * ((*grdPsi)[i] * ((*LALt[iq]) * (*grdPhi)[j])); + double val = quadrature->getWeight(iq) * ((*grdPsi)[i] * ((*LALt[iq]) * (*grdPhi)[j])); (*mat)[i][j] += val; (*mat)[j][i] += val; } } } - } - else { /* non symmetric assembling */ + } else { /* non symmetric assembling */ for (int iq = 0; iq < nPoints; iq++) { (*LALt[iq]) *= elInfo->getDet(); @@ -1242,11 +1263,6 @@ namespace AMDiS { } } } - - for (int i = 0;i < nPoints; i++) - DELETE LALt[i]; - - DELETE [] LALt; } Stand2::Stand2(Operator *op, Assembler *assembler, Quadrature *quad) diff --git a/AMDiS/src/Assembler.h b/AMDiS/src/Assembler.h index df347ea93d915840d4e146941aac179c31081c76..e782eb0435e1039f29fa5a348ce3a6e3aea7c7cd 100644 --- a/AMDiS/src/Assembler.h +++ b/AMDiS/src/Assembler.h @@ -117,7 +117,7 @@ namespace AMDiS { /** \brief * Returns \ref terms */ - inline ::std::vector<OperatorTerm*> *getTerms() { + inline std::vector<OperatorTerm*> *getTerms() { return &terms[omp_get_thread_num()]; }; @@ -227,12 +227,12 @@ namespace AMDiS { /** \brief * Used for \ref getVectorAtQPs(). */ - ::std::map<const DOFVectorBase<double>*, ValuesAtQPs*> valuesAtQPs; + std::map<const DOFVectorBase<double>*, ValuesAtQPs*> valuesAtQPs; /** \brief * Used for \ref getGradientsAtQPs(). */ - ::std::map<const DOFVectorBase<double>*, GradientsAtQPs*> gradientsAtQPs; + std::map<const DOFVectorBase<double>*, GradientsAtQPs*> gradientsAtQPs; /** \brief * Set and updated by \ref initElement() for each ElInfo. @@ -278,7 +278,7 @@ namespace AMDiS { /** \brief * List of all terms with a contribution to this SubAssembler */ - ::std::vector< ::std::vector<OperatorTerm*> > terms; + std::vector< std::vector<OperatorTerm*> > terms; /** \brief * @@ -339,12 +339,12 @@ namespace AMDiS { /** \brief * List of all yet created optimized SubAssembler objects. */ - static ::std::vector<SubAssembler*> optimizedSubAssemblers; + static std::vector<SubAssembler*> optimizedSubAssemblers; /** \brief * List of all yet created standard SubAssembler objects. */ - static ::std::vector<SubAssembler*> standardSubAssemblers; + static std::vector<SubAssembler*> standardSubAssemblers; }; // ============================================================================ @@ -398,6 +398,8 @@ namespace AMDiS { */ Quad0(Operator *op, Assembler *assembler, Quadrature *quad); + ~Quad0(); + /** \brief * Implements SubAssembler::calculateElementMatrix(). */ @@ -407,6 +409,9 @@ namespace AMDiS { * Implements SubAssembler::calculateElementVector(). */ void calculateElementVector(const ElInfo *elInfo, ElementVector *vec); + + protected: + std::vector<double*> cPtrs; }; @@ -502,22 +507,22 @@ namespace AMDiS { /** \brief * List of all yet created optimized zero order assemblers for grdPsi. */ - static ::std::vector<SubAssembler*> optimizedSubAssemblersGrdPsi; + static std::vector<SubAssembler*> optimizedSubAssemblersGrdPsi; /** \brief * List of all yet created standard zero order assemblers for grdPsi. */ - static ::std::vector<SubAssembler*> standardSubAssemblersGrdPsi; + static std::vector<SubAssembler*> standardSubAssemblersGrdPsi; /** \brief * List of all yet created optimized zero order assemblers for grdPhi. */ - static ::std::vector<SubAssembler*> optimizedSubAssemblersGrdPhi; + static std::vector<SubAssembler*> optimizedSubAssemblersGrdPhi; /** \brief * List of all yet created standard zero order assemblers for grdPhi. */ - static ::std::vector<SubAssembler*> standardSubAssemblersGrdPhi; + static std::vector<SubAssembler*> standardSubAssemblersGrdPhi; }; // ============================================================================ @@ -771,12 +776,12 @@ namespace AMDiS { /** \brief * List of all yet created optimized second order assemblers. */ - static ::std::vector<SubAssembler*> optimizedSubAssemblers; + static std::vector<SubAssembler*> optimizedSubAssemblers; /** \brief * List of all yet created standard second order assemblers. */ - static ::std::vector<SubAssembler*> standardSubAssemblers; + static std::vector<SubAssembler*> standardSubAssemblers; }; // ============================================================================ @@ -829,6 +834,8 @@ namespace AMDiS { */ Quad2(Operator *op, Assembler *assembler, Quadrature *quad); + ~Quad2(); + /** \brief * Implements SubAssembler::calculateElementMatrix(). */ @@ -840,6 +847,12 @@ namespace AMDiS { void calculateElementVector(const ElInfo *, ElementVector */*vec*/) { ERROR_EXIT("should not be called\n"); }; + + protected: + /** \brief + * Thread safe temporary vector of DimMats for calculation in calculateElementMatrix(). + */ + std::vector< DimMat<double>** > tmpLALt; }; // ============================================================================ @@ -886,7 +899,7 @@ namespace AMDiS { /** \brief * Thread safe temporary vector of DimMats for calculation in calculateElementMatrix(). */ - ::std::vector< DimMat<double>** > tmpLALt; + std::vector< DimMat<double>** > tmpLALt; friend class SecondOrderAssembler; }; diff --git a/AMDiS/src/DualTraverse.cc b/AMDiS/src/DualTraverse.cc index 799d46c2a05731578eceed9cf74a996ad289981f..5a624099418143fbaf029deadc843359e9f85a84 100644 --- a/AMDiS/src/DualTraverse.cc +++ b/AMDiS/src/DualTraverse.cc @@ -4,19 +4,19 @@ namespace AMDiS { - bool DualTraverse::traverseFirst(Mesh *mesh1, - Mesh *mesh2, - int level1, - int level2, - Flag flag1, - Flag flag2, + bool DualTraverse::traverseFirst(Mesh *mesh1, + Mesh *mesh2, + int level1, + int level2, + Flag flag1, + Flag flag2, ElInfo **elInfo1, ElInfo **elInfo2, ElInfo **elInfoSmall, ElInfo **elInfoLarge) { // replace CALL_EL_LEVEL by CALL_MG_LEVEL (covers whole domain) - if(flag1.isSet(Mesh::CALL_EL_LEVEL)) { + if (flag1.isSet(Mesh::CALL_EL_LEVEL)) { flag1 &= ~Mesh::CALL_EL_LEVEL; flag1 |= Mesh::CALL_MG_LEVEL; level1_ = level1; @@ -24,7 +24,7 @@ namespace AMDiS { level1_ = -1; } - if(flag2.isSet(Mesh::CALL_EL_LEVEL)) { + if (flag2.isSet(Mesh::CALL_EL_LEVEL)) { flag2 &= ~Mesh::CALL_EL_LEVEL; flag2 |= Mesh::CALL_MG_LEVEL; level2_ = level2; @@ -33,7 +33,7 @@ namespace AMDiS { } // replace CALL_LEAF_EL_LEVEL by CALL_MG_LEVEL (covers whole domain) - if(flag1.isSet(Mesh::CALL_LEAF_EL_LEVEL)) { + if (flag1.isSet(Mesh::CALL_LEAF_EL_LEVEL)) { flag1 &= ~Mesh::CALL_LEAF_EL_LEVEL; flag1 |= Mesh::CALL_MG_LEVEL; level1_ = level1; @@ -43,7 +43,7 @@ namespace AMDiS { callLeafElLevel1_ = false; } - if(flag2.isSet(Mesh::CALL_LEAF_EL_LEVEL)) { + if (flag2.isSet(Mesh::CALL_LEAF_EL_LEVEL)) { flag2 &= ~Mesh::CALL_LEAF_EL_LEVEL; flag2 |= Mesh::CALL_MG_LEVEL; level2_ = level2; @@ -55,15 +55,17 @@ namespace AMDiS { // call standard traverse *elInfo1 = stack1.traverseFirst(mesh1, level1, flag1); - while(*elInfo1 != NULL && skipEl1(*elInfo1)) + while (*elInfo1 != NULL && skipEl1(*elInfo1)) { *elInfo1 = stack1.traverseNext(*elInfo1); + } *elInfo2 = stack2.traverseFirst(mesh2, level2, flag2); - while(*elInfo2 != NULL && skipEl2(*elInfo2)) + while (*elInfo2 != NULL && skipEl2(*elInfo2)) { *elInfo2 = stack2.traverseNext(*elInfo2); + } // finished ? if (*elInfo1 == NULL || *elInfo2 == NULL) { - TEST_EXIT_DBG(*elInfo1 == *elInfo2)("invalid dual traverse\n"); + TEST_EXIT(*elInfo1 == *elInfo2)("invalid dual traverse\n"); return false; } @@ -73,14 +75,13 @@ namespace AMDiS { elInfoSmall, elInfoLarge); // check for non domain covering level traverse - if(!accepted || - (level1_ != -1 && (*elInfo1)->getLevel() != level1_) || - (callLeafElLevel1_ && !(*elInfo1)->getElement()->isLeaf()) || - (level2_ != -1 && (*elInfo2)->getLevel() != level2_) || - (callLeafElLevel2_ && !(*elInfo2)->getElement()->isLeaf())) - { - return traverseNext(elInfo1, elInfo2, elInfoSmall, elInfoLarge); - } + if (!accepted || + (level1_ != -1 && (*elInfo1)->getLevel() != level1_) || + (callLeafElLevel1_ && !(*elInfo1)->getElement()->isLeaf()) || + (level2_ != -1 && (*elInfo2)->getLevel() != level2_) || + (callLeafElLevel2_ && !(*elInfo2)->getElement()->isLeaf())) { + return traverseNext(elInfo1, elInfo2, elInfoSmall, elInfoLarge); + } return true; } @@ -91,12 +92,12 @@ namespace AMDiS { ElInfo **elInfoLarge) { // call standard traverse - if(inc1_) { + if (inc1_) { do { *elInfo1 = stack1.traverseNext(*elInfo1); } while(*elInfo1 != NULL && skipEl1(*elInfo1)); } - if(inc2_) { + if (inc2_) { do { *elInfo2 = stack2.traverseNext(*elInfo2); } while (*elInfo2 != NULL && skipEl2(*elInfo2)); @@ -104,7 +105,7 @@ namespace AMDiS { // finished ? if (*elInfo1 == NULL || *elInfo2 == NULL) { - TEST_EXIT_DBG(*elInfo1 == *elInfo2)("invalid dual traverse\n"); + TEST_EXIT(*elInfo1 == *elInfo2)("invalid dual traverse\n"); return false; } @@ -112,15 +113,14 @@ namespace AMDiS { elInfoSmall, elInfoLarge); // check for non domain covering level traverse - if(!accepted || - (level1_ != -1 && (*elInfo1)->getLevel() != level1_) || - (callLeafElLevel1_ && !(*elInfo1)->getElement()->isLeaf()) || - (level2_ != -1 && (*elInfo2)->getLevel() != level2_) || - (callLeafElLevel2_ && !(*elInfo2)->getElement()->isLeaf())) - { - return traverseNext(elInfo1, elInfo2, elInfoSmall, elInfoLarge); - } - + if (!accepted || + (level1_ != -1 && (*elInfo1)->getLevel() != level1_) || + (callLeafElLevel1_ && !(*elInfo1)->getElement()->isLeaf()) || + (level2_ != -1 && (*elInfo2)->getLevel() != level2_) || + (callLeafElLevel2_ && !(*elInfo2)->getElement()->isLeaf())) { + return traverseNext(elInfo1, elInfo2, elInfoSmall, elInfoLarge); + } + return true; } @@ -145,7 +145,7 @@ namespace AMDiS { // update rest rest_ -= 1.0 / (1 << (smallLevel - largeLevel)); - if(rest_ < 1e-32) { + if (rest_ < 1e-32) { // large element finished -> increment both elements rest_ = 1.0; inc1_ = true; diff --git a/AMDiS/src/DualTraverse.h b/AMDiS/src/DualTraverse.h index 78b76b9a673de77baa809576a23ef303ed7266d7..ec321921fa8436012af26845ec57f6823633e52f 100644 --- a/AMDiS/src/DualTraverse.h +++ b/AMDiS/src/DualTraverse.h @@ -48,12 +48,12 @@ namespace AMDiS { /** \brief * Start dual traversal */ - bool traverseFirst(Mesh *mesh1, - Mesh *mesh2, - int level1, - int level2, - Flag flag1, - Flag flag2, + bool traverseFirst(Mesh *mesh1, + Mesh *mesh2, + int level1, + int level2, + Flag flag1, + Flag flag2, ElInfo **elInfo1, ElInfo **elInfo2, ElInfo **elInfoSmall, diff --git a/AMDiS/src/MacroReader.cc b/AMDiS/src/MacroReader.cc index a447efc6081c58619d1d330ba92c2ea2051e0f04..c6733b0efc50e664721caa95607062b2947711b8 100644 --- a/AMDiS/src/MacroReader.cc +++ b/AMDiS/src/MacroReader.cc @@ -39,7 +39,7 @@ namespace AMDiS { DegreeOfFreedom **dof = macroInfo->dof; // === read periodic data ================================= - if (periodicFile&&(strcmp(periodicFile, "") != 0)) { + if (periodicFile && (strcmp(periodicFile, "") != 0)) { WARNING("periodic boundaries may lead to errors in small meshes if element neighbours not set\n"); FILE *file = fopen(periodicFile, "r"); @@ -209,8 +209,7 @@ namespace AMDiS { for (int i = 0; i < mesh->getNumberOfVertices(); i++) { if (i != (*(assoc->second))[i]) MSG("association %d: vertex %d -> vertex %d\n", - assoc->first, - i, (*(assoc->second))[i]); + assoc->first, i, (*(assoc->second))[i]); } } @@ -265,7 +264,7 @@ namespace AMDiS { macroInfo->dirichletBoundary(); } - if(mesh->getDim() > 1) + if (mesh->getDim() > 1) boundaryDOFs(mesh); // initial boundary projections @@ -936,58 +935,54 @@ namespace AMDiS { void MacroReader::computeNeighbours(Mesh *mesh) { - FUNCNAME("MacroReader::computeNeighbours"); - int i, j, k, l, m; - int dim = mesh->getDim(); + FUNCNAME("MacroReader::computeNeighbours()"); + int dim = mesh->getDim(); FixVec<DegreeOfFreedom*, DIMEN> dof(dim, NO_INIT); - for (i = 0; i < mesh->getNumberOfLeaves(); i++) - { - for (k = 0; k < mesh->getGeo(NEIGH); k++) - { - mesh->getMacroElement(i)->setOppVertex(k, AMDIS_UNDEFINED); - mesh->getMacroElement(i)->setNeighbour(k, NULL); - } + for (int i = 0; i < mesh->getNumberOfLeaves(); i++) { + for (int k = 0; k < mesh->getGeo(NEIGH); k++) { + mesh->getMacroElement(i)->setOppVertex(k, AMDIS_UNDEFINED); + mesh->getMacroElement(i)->setNeighbour(k, NULL); } + } - for (i = 0; i < mesh->getNumberOfLeaves(); i++) - { - // MSG("search neighbour for element %d\n", i); - for (k = 0; k < mesh->getGeo(NEIGH); k++) - { - if(mesh->getMacroElement(i)->getBoundary(k) != INTERIOR) { - mesh->getMacroElement(i)->setNeighbour(k, NULL); - mesh->getMacroElement(i)->setOppVertex(k, -1); - continue; - } - - if (mesh->getMacroElement(i)->getOppVertex(k) == AMDIS_UNDEFINED) - { - if(dim == 1) - dof[0] = const_cast<DegreeOfFreedom*>(mesh->getMacroElement(i)-> - getElement()->getDOF(k)); - else - for (l = 0; l < dim; l++) - dof[l] = const_cast<DegreeOfFreedom*>(mesh->getMacroElement(i)-> - getElement()-> - getDOF((k+l+1)%(dim+1))); - - for (j = i + 1; j < mesh->getNumberOfLeaves(); j++) { - if ((m = mesh->getMacroElement(j)->getElement()->oppVertex(dof)) != -1) { - mesh->getMacroElement(i)->setNeighbour(k, mesh->getMacroElement(j)); - mesh->getMacroElement(j)->setNeighbour(m, mesh->getMacroElement(i)); - mesh->getMacroElement(i)->setOppVertex(k, m); - mesh->getMacroElement(j)->setOppVertex(m, k); - break; - } - } + for (int i = 0; i < mesh->getNumberOfLeaves(); i++) { + for (int k = 0; k < mesh->getGeo(NEIGH); k++) { + if (mesh->getMacroElement(i)->getBoundary(k) != INTERIOR) { + mesh->getMacroElement(i)->setNeighbour(k, NULL); + mesh->getMacroElement(i)->setOppVertex(k, -1); + continue; + } - TEST_EXIT(j < mesh->getNumberOfLeaves()) - ("could not find neighbour %d of element %d\n", k, i); - } + if (mesh->getMacroElement(i)->getOppVertex(k) == AMDIS_UNDEFINED) { + if (dim == 1) { + dof[0] = const_cast<DegreeOfFreedom*>(mesh->getMacroElement(i)-> + getElement()->getDOF(k)); + } else { + for (int l = 0; l < dim; l++) + dof[l] = const_cast<DegreeOfFreedom*>(mesh->getMacroElement(i)-> + getElement()-> + getDOF((k+l+1)%(dim+1))); } + + int j = 0; + for (j = i + 1; j < mesh->getNumberOfLeaves(); j++) { + int m = mesh->getMacroElement(j)->getElement()->oppVertex(dof); + if (m != -1) { + mesh->getMacroElement(i)->setNeighbour(k, mesh->getMacroElement(j)); + mesh->getMacroElement(j)->setNeighbour(m, mesh->getMacroElement(i)); + mesh->getMacroElement(i)->setOppVertex(k, m); + mesh->getMacroElement(j)->setOppVertex(m, k); + break; + } + } + + TEST_EXIT(j < mesh->getNumberOfLeaves()) + ("could not find neighbour %d of element %d\n", k, i); + } } + } return; @@ -1173,25 +1168,20 @@ namespace AMDiS { void MacroReader::macroTest(Mesh *mesh, const char *nameneu) { - FUNCNAME("MacroReader::macroTest"); - - int i; + FUNCNAME("MacroReader::macroTest()"); - i = macrotest(mesh); + int i = macrotest(mesh); - if (i >= 0) - { - ERROR("There is a cycle beginning in macro element %d\n", i); - ERROR("Entries in MacroElement structures get reordered\n"); - umb(NULL,mesh, umbVkantMacro); + if (i >= 0) { + ERROR("There is a cycle beginning in macro element %d\n", i); + ERROR("Entries in MacroElement structures get reordered\n"); + umb(NULL, mesh, umbVkantMacro); - if (nameneu) - { - ERROR_EXIT("mesh->feSpace\n"); - //MacroWriter::writeMacro(mesh, nameneu); - MSG("Reordered mesh written to file %s.\n",nameneu); - } + if (nameneu) { + ERROR_EXIT("mesh->feSpace\n"); } + } + return; } @@ -1207,89 +1197,69 @@ namespace AMDiS { int MacroReader::macrotest(Mesh *mesh) { - FUNCNAME("MacroReader::macrotest"); + FUNCNAME("MacroReader::macrotest()"); int *test; - int i; int *zykl; ::std::deque<MacroElement*>::const_iterator macro,mac; int flg; ::std::deque<MacroElement*>::const_iterator macrolfd; int zykstart; - int dim = mesh->getDim(); - test=GET_MEMORY(int, mesh->getNumberOfMacros()); - zykl=GET_MEMORY(int, mesh->getNumberOfMacros()); + test = GET_MEMORY(int, mesh->getNumberOfMacros()); + zykl = GET_MEMORY(int, mesh->getNumberOfMacros()); - for (i=0; i < mesh->getNumberOfMacros(); i++) - test[i]=0; - - zykstart=-1; + for (int i = 0; i < mesh->getNumberOfMacros(); i++) { + test[i] = 0; + } - macrolfd=mesh->firstMacroElement(); + zykstart = -1; + macrolfd = mesh->firstMacroElement(); - while (macrolfd != mesh->endOfMacroElements()) - { - if (test[(*macrolfd)->getIndex()]==1) - { - macrolfd++; - } - else - { - for (i=0; i < mesh->getNumberOfMacros(); i++) - zykl[i]=0; + while (macrolfd != mesh->endOfMacroElements()) { + if (test[(*macrolfd)->getIndex()] == 1) { + macrolfd++; + } else { + for (int i = 0; i < mesh->getNumberOfMacros(); i++) { + zykl[i] = 0; + } - macro=macrolfd; - - flg=2; - do - { - if (zykl[(*macro)->getIndex()] == 1) - { - flg=0; - zykstart=(*macro)->getIndex(); - } - else - { - zykl[(*macro)->getIndex()]=1; + macro = macrolfd; + flg = 2; + do { + if (zykl[(*macro)->getIndex()] == 1) { + flg = 0; + zykstart = (*macro)->getIndex(); + } else { + zykl[(*macro)->getIndex()] = 1; - if (test[(*macro)->getIndex()]==1) - { - flg=1; - } - else if ((*macro)->getNeighbour(dim) == NULL) - { - flg=1; - test[(*macro)->getIndex()]=1; - } - else if ((*macro) == (*macro)->getNeighbour(dim)->getNeighbour(dim)) - { - flg=1; - test[(*macro)->getIndex()]=1; - test[(*macro)->getNeighbour(dim)->getIndex()]=1; - } - else - { - for(mac=mesh->firstMacroElement(); - (*mac)!=(*macro)->getNeighbour(dim); - mac++); - macro=mac; - } - } - - } while(flg == 2); + if (test[(*macro)->getIndex()] == 1) { + flg = 1; + } else if ((*macro)->getNeighbour(dim) == NULL) { + flg = 1; + test[(*macro)->getIndex()] = 1; + } + else if ((*macro) == (*macro)->getNeighbour(dim)->getNeighbour(dim)) { + flg = 1; + test[(*macro)->getIndex()] = 1; + test[(*macro)->getNeighbour(dim)->getIndex()] = 1; + } else { + for (mac = mesh->firstMacroElement(); + (*mac)!=(*macro)->getNeighbour(dim); + mac++); + macro = mac; + } + } + } while(flg == 2); - if (flg == 1) - { - macrolfd++; - } - else - { - macrolfd=mesh->endOfMacroElements(); - } - } + if (flg == 1) { + macrolfd++; + } else { + macrolfd=mesh->endOfMacroElements(); + } } + } FREE_MEMORY(zykl, int, mesh->getNumberOfMacros()); FREE_MEMORY(test, int, mesh->getNumberOfMacros()); diff --git a/AMDiS/src/Operator.cc b/AMDiS/src/Operator.cc index af4800640c06a4dc70e0289130cecb33e9483406..eecdbf4e1cd2b3e8b576f4ebe1dbb5f874a80e90 100644 --- a/AMDiS/src/Operator.cc +++ b/AMDiS/src/Operator.cc @@ -55,7 +55,7 @@ namespace AMDiS { void OperatorTerm::setSymmetric(bool symm) { - if(symm) { + if (symm) { properties.setFlag(SYMMETRIC); } else { properties.unsetFlag(SYMMETRIC); @@ -68,27 +68,29 @@ namespace AMDiS { } void OperatorTerm::lalt(const DimVec<WorldVector<double> >& Lambda, - const WorldMatrix<double>& matrix, - DimMat<double>& LALt, - bool symm, - double factor) + const WorldMatrix<double>& matrix, + DimMat<double>& LALt, + bool symm, + double factor) { - int i, j, k, l; - static const int dimOfWorld = Global::getGeo(WORLD); - int dim = LALt.getNumRows() - 1; + int i, j, k, l; + static const int dimOfWorld = Global::getGeo(WORLD); + int dim = LALt.getNumRows() - 1; double val = 0.0; - if(symm) { + if (symm) { for (i = 0; i <= dim; i++) { - for (val = k = 0; k < dimOfWorld; k++) - for(l=0; l < dimOfWorld; l++) + val = 0.0; + for (k = 0; k < dimOfWorld; k++) + for (l = 0; l < dimOfWorld; l++) val += Lambda[i][k] * matrix[k][l] * Lambda[i][l]; val *= factor; LALt[i][i] += val; for (j = i+1; j <= dim; j++) { - for (val = k = 0; k < dimOfWorld; k++) - for(l=0; l < dimOfWorld; l++) + val = 0.0; + for (k = 0; k < dimOfWorld; k++) + for (l = 0; l < dimOfWorld; l++) val += Lambda[i][k] * matrix[k][l] * Lambda[j][l]; val *= factor; LALt[i][j] += val; @@ -98,8 +100,9 @@ namespace AMDiS { } else { for (i = 0; i <= dim; i++) { for (j = 0; j <= dim; j++) { - for (val = k = 0; k < dimOfWorld; k++) - for(l=0; l < dimOfWorld; l++) + val = 0.0; + for (k = 0; k < dimOfWorld; k++) + for (l = 0; l < dimOfWorld; l++) val += Lambda[i][k] * matrix[k][l] * Lambda[j][l]; val *= factor; LALt[i][j] += val; @@ -455,32 +458,28 @@ namespace AMDiS { void VecAtQP_SOT::getLALt(const ElInfo *elInfo, int numPoints, DimMat<double> **LALt) const { const DimVec<WorldVector<double> > &Lambda = elInfo->getGrdLambda(); - int iq; - for(iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < numPoints; iq++) { l1lt(Lambda, *(LALt[iq]), (*f)(vecAtQPs[iq])); } } void CoordsAtQP_SOT::getLALt(const ElInfo *elInfo, int numPoints, DimMat<double> **LALt) const { const DimVec<WorldVector<double> > &Lambda = elInfo->getGrdLambda(); - int iq; - for(iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < numPoints; iq++) { l1lt(Lambda, (*LALt[iq]), (*g)(coordsAtQPs[iq])); } } void MatrixGradient_SOT::getLALt(const ElInfo *elInfo, int numPoints, DimMat<double> **LALt) const { const DimVec<WorldVector<double> > &Lambda = elInfo->getGrdLambda(); - int iq; - for(iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < numPoints; iq++) { lalt(Lambda, (*f)(gradAtQPs[iq]), (*LALt[iq]), symmetric, 1.0); } } void FctGradient_SOT::getLALt(const ElInfo *elInfo, int numPoints, DimMat<double> **LALt) const { const DimVec<WorldVector<double> > &Lambda = elInfo->getGrdLambda(); - int iq; - for(iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < numPoints; iq++) { l1lt(Lambda, *(LALt[iq]), (*f)(gradAtQPs[iq])); } } @@ -488,16 +487,14 @@ namespace AMDiS { void VecAndGradientAtQP_SOT::getLALt(const ElInfo *elInfo, int numPoints, DimMat<double> **LALt) const { const DimVec<WorldVector<double> > &Lambda = elInfo->getGrdLambda(); - int iq; - for(iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < numPoints; iq++) { l1lt(Lambda, *(LALt[iq]), (*f)(vecAtQPs[iq], gradAtQPs[iq])); } } void VecAndCoordsAtQP_SOT::getLALt(const ElInfo *elInfo, int numPoints, DimMat<double> **LALt) const { const DimVec<WorldVector<double> > &Lambda = elInfo->getGrdLambda(); - int iq; - for(iq = 0; iq < numPoints; iq++) { + for (int iq = 0; iq < numPoints; iq++) { l1lt(Lambda, *(LALt[iq]), (*f)(vecAtQPs[iq], coordsAtQPs[iq])); } } diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc index 8ad3d0e643c9eced7d85e658b4d861423dfb7e16..6e832de2aee450f3e60259a3d6b9dc98a6cb56c0 100644 --- a/AMDiS/src/ProblemVec.cc +++ b/AMDiS/src/ProblemVec.cc @@ -1,7 +1,6 @@ #include "ProblemVec.h" #include "RecoveryEstimator.h" #include "Serializer.h" -#include "DualTraverse.h" #include "AbstractFunction.h" #include "Operator.h" #include "SystemVector.h" diff --git a/AMDiS/src/Quadrature.cc b/AMDiS/src/Quadrature.cc index 867fec4255dd62f6c01c322157b31f1244f1e6ce..de3e250a6724e8fadc5d3bb70766fa7a99411751 100644 --- a/AMDiS/src/Quadrature.cc +++ b/AMDiS/src/Quadrature.cc @@ -7,7 +7,7 @@ namespace AMDiS { const int Quadrature::maxNQuadPoints[4] = {0, 10, 61, 64}; - ::std::list<FastQuadrature*> FastQuadrature::fastQuadList; + std::list<FastQuadrature*> FastQuadrature::fastQuadList; int FastQuadrature::max_points = 0; Quadrature::Quadrature(const Quadrature& q) @@ -49,7 +49,7 @@ namespace AMDiS { val = vec; } else { if (static_cast<int>( size) < n_points) { - size_t new_size = ::std::max(maxNQuadPoints[dim], n_points); + size_t new_size = std::max(maxNQuadPoints[dim], n_points); DELETE [] quad_vec_d; quad_vec_d = NEW WorldVector<double>[new_size]; size = new_size; @@ -74,7 +74,7 @@ namespace AMDiS { { FUNCNAME("Quadrature::fAtQp()"); - static double *quad_vec = NULL; + static double *quad_vec = NULL; static size_t size = 0; double *val; @@ -82,7 +82,7 @@ namespace AMDiS { val = vec; } else { if (static_cast<int>( size) < n_points) { - size_t new_size = ::std::max(maxNQuadPoints[dim], n_points); + size_t new_size = std::max(maxNQuadPoints[dim], n_points); FREE_MEMORY(quad_vec, double, size); quad_vec = GET_MEMORY(double, new_size); size = new_size; @@ -1414,13 +1414,13 @@ namespace AMDiS { degree_ = 0; break; case 1: - degree_ = ::std::min(degree_, 19); + degree_ = std::min(degree_, 19); break; case 2: - degree_ = ::std::min(degree_, 17); + degree_ = std::min(degree_, 17); break; case 3: - degree_ = ::std::min(degree_, 7); + degree_ = std::min(degree_, 7); break; default: ERROR_EXIT("invalid dim\n"); @@ -1447,7 +1447,7 @@ namespace AMDiS { return 0; } - double result = 0; + double result = 0.0; // calculate weighted sum over all quadrature-points for (int i = 0; i < n_points; i++) { result += w[i] * (*f)((*lambda)[i]); @@ -1461,7 +1461,7 @@ namespace AMDiS { { FUNCNAME("FastQuadrature::FastQuadrature()"); - ::std::list<FastQuadrature*>::iterator fast = fastQuadList.begin(); + std::list<FastQuadrature*>::iterator fast = fastQuadList.begin(); FastQuadrature *quad_fast; @@ -1478,7 +1478,7 @@ namespace AMDiS { fastQuadList.push_front(quad_fast); - max_points = ::std::max(max_points, quad.getNumPoints()); + max_points = std::max(max_points, quad.getNumPoints()); } else { quad_fast = (*fast); } @@ -1491,7 +1491,7 @@ namespace AMDiS { void FastQuadrature::init(Flag init_flag) { int dim = quadrature->getDim(); - int n_points = quadrature->getNumPoints(); + int nPoints = quadrature->getNumPoints(); int nBasFcts = basisFunctions->getNumber(); DimVec<double> lambda(dim, NO_INIT); @@ -1501,13 +1501,13 @@ namespace AMDiS { if (!phi && init_flag.isSet(INIT_PHI)) { // check flag // allocate memory - phi = GET_MEMORY(double*, n_points); - for (int i = 0; i < n_points; i++) { + phi = GET_MEMORY(double*, nPoints); + for (int i = 0; i < nPoints; i++) { phi[i] = GET_MEMORY(double, nBasFcts); } // fill memory - for (int i = 0; i< n_points; i++) { + for (int i = 0; i< nPoints; i++) { lambda = quadrature->getLambda(i); for (int j = 0; j < nBasFcts; j++) { phi[i][j] = (*(basisFunctions->getPhi(j)))(lambda); @@ -1523,10 +1523,10 @@ namespace AMDiS { if (!grdPhi && init_flag.isSet(INIT_GRD_PHI)) { // check flag // allocate memory - grdPhi = NEW MatrixOfFixVecs<DimVec<double> >(dim, n_points, nBasFcts, NO_INIT); + grdPhi = NEW MatrixOfFixVecs<DimVec<double> >(dim, nPoints, nBasFcts, NO_INIT); // fill memory - for (int i = 0; i< n_points; i++) { + for (int i = 0; i< nPoints; i++) { lambda = quadrature->getLambda(i); for (int j = 0; j < nBasFcts; j++) { (*(basisFunctions->getGrdPhi(j)))(lambda, (*(grdPhi))[i][j]); @@ -1542,10 +1542,10 @@ namespace AMDiS { if (!D2Phi && init_flag.isSet(INIT_D2_PHI)) { // check flag // allocate memory - D2Phi = NEW MatrixOfFixVecs<DimMat<double> >(dim, n_points, nBasFcts, NO_INIT); + D2Phi = NEW MatrixOfFixVecs<DimMat<double> >(dim, nPoints, nBasFcts, NO_INIT); // fill memory - for (int i = 0; i < n_points; i++) { + for (int i = 0; i < nPoints; i++) { lambda = quadrature->getLambda(i); for (int j = 0; j < nBasFcts; j++) { (*(basisFunctions->getD2Phi(j)))(lambda, (*(D2Phi))[i][j]); @@ -1572,12 +1572,12 @@ namespace AMDiS { basisFunctions = fastQuad.basisFunctions; quadrature = fastQuad.quadrature; - int n_points = quadrature->getNumPoints(); + int nPoints = quadrature->getNumPoints(); int nBasFcts = basisFunctions->getNumber(); if (fastQuad.phi) { - phi = GET_MEMORY(double*, n_points); - for (int i = 0; i < n_points; i++) { + phi = GET_MEMORY(double*, nPoints); + for (int i = 0; i < nPoints; i++) { phi[i] = GET_MEMORY(double, nBasFcts); for (int j = 0; j < nBasFcts; j++) { phi[i][j] = fastQuad.phi[i][j]; @@ -1586,8 +1586,8 @@ namespace AMDiS { } if (fastQuad.grdPhi) { - grdPhi = NEW MatrixOfFixVecs<DimVec<double> >(dim, n_points, nBasFcts, NO_INIT); - for (int i = 0; i < n_points; i++) { + grdPhi = NEW MatrixOfFixVecs<DimVec<double> >(dim, nPoints, nBasFcts, NO_INIT); + for (int i = 0; i < nPoints; i++) { for (int j = 0; j < nBasFcts; j++) { (*grdPhi)[i][j] = (*(fastQuad.grdPhi))[i][j]; } @@ -1595,8 +1595,8 @@ namespace AMDiS { } if (fastQuad.D2Phi) { - D2Phi = NEW MatrixOfFixVecs<DimMat<double> >(dim, n_points, nBasFcts, NO_INIT); - for (int i = 0; i < n_points; i++) { + D2Phi = NEW MatrixOfFixVecs<DimMat<double> >(dim, nPoints, nBasFcts, NO_INIT); + for (int i = 0; i < nPoints; i++) { for (int j = 0; j < nBasFcts; j++) { (*D2Phi)[i][j] = (*(fastQuad.D2Phi))[i][j]; } @@ -1606,30 +1606,22 @@ namespace AMDiS { FastQuadrature::~FastQuadrature() { - int n_points = quadrature->getNumPoints(); + int nPoints = quadrature->getNumPoints(); - for (int i = 0; i < n_points; i++) { + for (int i = 0; i < nPoints; i++) { FREE_MEMORY(phi[i], double, basisFunctions->getNumber()); } - FREE_MEMORY(phi, double*, n_points); + FREE_MEMORY(phi, double*, nPoints); DELETE grdPhi; DELETE D2Phi; } const double FastQuadrature::getSecDer(int q,int i ,int j, int m) const { - return (D2Phi)?(*D2Phi)[q][i][j][m]:0; + return (D2Phi) ? (*D2Phi)[q][i][j][m] : 0.0; } const VectorOfFixVecs<DimMat<double> > *FastQuadrature::getSecDer(int q) const { return D2Phi ? (&((*D2Phi)[q])) : NULL; } - - const double FastQuadrature::getGradient(int q,int i ,int j) const { - return (grdPhi)?(*grdPhi)[q][i][j]:0; - } - - VectorOfFixVecs<DimVec<double> >* FastQuadrature::getGradient(int q) const { - return (grdPhi)?&((*grdPhi)[q]):NULL; - } } diff --git a/AMDiS/src/Quadrature.h b/AMDiS/src/Quadrature.h index 53793b4a739f5c389ac71ad82f81f3359b45f90a..2c5d7c2fa4ff38510e69ac9b76baad8f64b511d4 100644 --- a/AMDiS/src/Quadrature.h +++ b/AMDiS/src/Quadrature.h @@ -114,7 +114,7 @@ namespace AMDiS { /** \brief * Returns \ref name */ - inline const ::std::string& getName() { + inline const std::string& getName() { return name; }; @@ -212,7 +212,7 @@ namespace AMDiS { /** \brief * Name of this Quadrature */ - ::std::string name; + std::string name; /** \brief * Quadrature is exact of this degree @@ -453,12 +453,16 @@ namespace AMDiS { /** \brief * Returns (*\ref grdPhi)[q][i][j] */ - const double getGradient(int q, int i ,int j) const; + inline const double getGradient(int q, int i ,int j) const { + return (grdPhi) ? (*grdPhi)[q][i][j] : 0.0; + }; /** \brief * Returns (*\ref grdPhi)[q] */ - VectorOfFixVecs<DimVec<double> >* getGradient(int q) const; + inline VectorOfFixVecs<DimVec<double> >* getGradient(int q) const { + return (grdPhi) ? &((*grdPhi)[q]) : NULL; + }; /** \brief * Returns \ref phi[q][i] @@ -586,7 +590,7 @@ namespace AMDiS { /** \brief * List of all used FastQuadratures */ - static ::std::list<FastQuadrature*> fastQuadList; + static std::list<FastQuadrature*> fastQuadList; /** \brief * Maximal number of quadrature points for all yet initialised FastQuadrature