Liebe Gitlab-Nutzerin, lieber Gitlab-Nutzer,
es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Die Konten der externen Nutzer:innen sind über den Reiter "Standard" erreichbar.

Dear Gitlab user,
it is now possible to log in to our service using the ZIH login/LDAP. The accounts of external users can be accessed via the "Standard" tab.

Commit ecb93cc3 by Thomas Witkowski

### Fixed FETI-DP for Stokes problem.

parent e8e207b4
 ... @@ -16,23 +16,4 @@ ... @@ -16,23 +16,4 @@ namespace AMDiS { namespace AMDiS { vector getComponentFeSpaces(Matrix &mat) { FUNCNAME("getComponentFeSpaces()"); int nComponents = mat.getNumRows(); vector result(nComponents); for (int i = 0; i < nComponents; i++) { for (int j = 0; j < nComponents; j++) { if (mat[i][j]) { result[i] = mat[i][j]->getRowFeSpace(); break; } } } return result; } } }
 ... @@ -518,11 +518,6 @@ namespace AMDiS { ... @@ -518,11 +518,6 @@ namespace AMDiS { z[1] = x[2] * y[0] - x[0] * y[2]; z[1] = x[2] * y[0] - x[0] * y[2]; z[2] = x[0] * y[1] - x[1] * y[0]; z[2] = x[0] * y[1] - x[1] * y[0]; } } /// Returns a vector with the FE spaces of each row in the matrix. Thus, the /// resulting vector may contain the same FE space multiple times. vector getComponentFeSpaces(Matrix &mat); } } #endif // AMDIS_MATRIXVECTOR_H #endif // AMDIS_MATRIXVECTOR_H
 ... @@ -334,7 +334,7 @@ namespace AMDiS { ... @@ -334,7 +334,7 @@ namespace AMDiS { } } /// Returns \ref componentSpaces; /// Returns \ref componentSpaces; inline vector getComponentFeSpaces() inline vector getComponentSpaces() { { return componentSpaces; return componentSpaces; } } ... ...
 ... @@ -35,14 +35,4 @@ namespace AMDiS { ... @@ -35,14 +35,4 @@ namespace AMDiS { vectors[i]->deserialize(in); vectors[i]->deserialize(in); } } vector SystemVector::getComponentFeSpaces() const { vector result(vectors.size()); for (unsigned int i = 0; i < vectors.size(); i++) result[i] = vectors[i]->getFeSpace(); return result; } } }
 ... @@ -120,8 +120,6 @@ namespace AMDiS { ... @@ -120,8 +120,6 @@ namespace AMDiS { return feSpace; return feSpace; } } vector getComponentFeSpaces() const; /// Here the system vector is interpreted as one large vector. The given /// Here the system vector is interpreted as one large vector. The given /// is used as a global index which indicates a local vector number and /// is used as a global index which indicates a local vector number and /// a local index on this vector. The operator returns this local vector /// a local index on this vector. The operator returns this local vector ... ...
 ... @@ -160,18 +160,18 @@ namespace AMDiS { ... @@ -160,18 +160,18 @@ namespace AMDiS { bool doNext = false; bool doNext = false; do { do { doNext = false; doNext = false; for (unsigned int i = 0; i < uniqueFeSpaces.size() - 1; i++) { for (unsigned int i = 0; i < feSpaces.size() - 1; i++) { if (uniqueFeSpaces[i]->getBasisFcts()->getDegree() > if (feSpaces[i]->getBasisFcts()->getDegree() > uniqueFeSpaces[i + 1]->getBasisFcts()->getDegree()) { feSpaces[i + 1]->getBasisFcts()->getDegree()) { const FiniteElemSpace *tmp = uniqueFeSpaces[i + 1]; const FiniteElemSpace *tmp = feSpaces[i + 1]; uniqueFeSpaces[i + 1] = uniqueFeSpaces[i]; feSpaces[i + 1] = feSpaces[i]; uniqueFeSpaces[i] = tmp; feSpaces[i] = tmp; doNext = true; doNext = true; } } } } } while (doNext); } while (doNext); elObjDb.setFeSpace(uniqueFeSpaces[0]); elObjDb.setFeSpace(feSpaces[0]); // If required, create hierarchical mesh level structure. // If required, create hierarchical mesh level structure. createMeshLevelStructure(); createMeshLevelStructure(); ... @@ -193,7 +193,7 @@ namespace AMDiS { ... @@ -193,7 +193,7 @@ namespace AMDiS { elObjDb.setData(partitionMap, levelData); elObjDb.setData(partitionMap, levelData); #if (DEBUG != 0) #if (DEBUG != 0) ParallelDebug::writeDebugFile(uniqueFeSpaces[uniqueFeSpaces.size() - 1], ParallelDebug::writeDebugFile(feSpaces[feSpaces.size() - 1], dofMap, dofMap, debugOutputDir + "mpi-dbg", "dat"); debugOutputDir + "mpi-dbg", "dat"); #endif #endif ... @@ -318,7 +318,7 @@ namespace AMDiS { ... @@ -318,7 +318,7 @@ namespace AMDiS { ParallelDebug::testInteriorBoundary(*this); ParallelDebug::testInteriorBoundary(*this); ParallelDebug::followBoundary(*this); ParallelDebug::followBoundary(*this); debug::writeMesh(uniqueFeSpaces[0], -1, debugOutputDir + "macro_mesh"); debug::writeMesh(feSpaces[0], -1, debugOutputDir + "macro_mesh"); MSG("Debug mode tests finished!\n"); MSG("Debug mode tests finished!\n"); #endif #endif ... @@ -369,9 +369,9 @@ namespace AMDiS { ... @@ -369,9 +369,9 @@ namespace AMDiS { TEST_EXIT(componentSpaces.size() == 0) TEST_EXIT(componentSpaces.size() == 0) ("Parallelization of coupled problems is deactived at the moment!\n"); ("Parallelization of coupled problems is deactived at the moment!\n"); componentSpaces = probStat->getComponentFeSpaces(); componentSpaces = probStat->getComponentSpaces(); uniqueFeSpaces = probStat->getFeSpaces(); feSpaces = probStat->getFeSpaces(); mesh = uniqueFeSpaces[0]->getMesh(); mesh = feSpaces[0]->getMesh(); info = probStat->getInfo(); info = probStat->getInfo(); switch (mesh->getDim()) { switch (mesh->getDim()) { ... @@ -668,8 +668,8 @@ namespace AMDiS { ... @@ -668,8 +668,8 @@ namespace AMDiS { DofEdge dofEdge1 = edge1.first->getEdge(edge1.second); DofEdge dofEdge1 = edge1.first->getEdge(edge1.second); WorldVector c0, c1; WorldVector c0, c1; mesh->getDofIndexCoords(dofEdge0.first, uniqueFeSpaces[0], c0); mesh->getDofIndexCoords(dofEdge0.first, feSpaces[0], c0); mesh->getDofIndexCoords(dofEdge0.second, uniqueFeSpaces[0], c1); mesh->getDofIndexCoords(dofEdge0.second, feSpaces[0], c1); MSG("FOUND EDGE %d/%d <-> %d/%d\n", MSG("FOUND EDGE %d/%d <-> %d/%d\n", edge0.first->getIndex(), edge0.second, edge0.first->getIndex(), edge0.second, ... @@ -966,7 +966,7 @@ namespace AMDiS { ... @@ -966,7 +966,7 @@ namespace AMDiS { MPI::Wtime() - first); MPI::Wtime() - first); #if (DEBUG != 0) #if (DEBUG != 0) debug::writeMesh(uniqueFeSpaces[0], -1, debugOutputDir + "mesh"); debug::writeMesh(feSpaces[0], -1, debugOutputDir + "mesh"); #endif #endif // Because the mesh has been changed, update the DOF numbering and mappings. // Because the mesh has been changed, update the DOF numbering and mappings. ... @@ -1267,7 +1267,7 @@ namespace AMDiS { ... @@ -1267,7 +1267,7 @@ namespace AMDiS { if (writePartMesh > 0 && repartitioningCounter == 0) if (writePartMesh > 0 && repartitioningCounter == 0) ParallelDebug::writePartitioningFile(debugOutputDir + "partitioning", ParallelDebug::writePartitioningFile(debugOutputDir + "partitioning", repartitioningCounter, repartitioningCounter, uniqueFeSpaces[0]); feSpaces[0]); repartitioningCounter++; repartitioningCounter++; ... @@ -1298,7 +1298,7 @@ namespace AMDiS { ... @@ -1298,7 +1298,7 @@ namespace AMDiS { // === Run mesh partitioner to calculate a new mesh partitioning. === // === Run mesh partitioner to calculate a new mesh partitioning. === partitioner->setLocalGlobalDofMap(&(dofMap[uniqueFeSpaces[0]].getMap())); partitioner->setLocalGlobalDofMap(&(dofMap[feSpaces[0]].getMap())); bool partitioningSucceed = bool partitioningSucceed = partitioner->partition(elemWeights, ADAPTIVE_REPART); partitioner->partition(elemWeights, ADAPTIVE_REPART); if (!partitioningSucceed) { if (!partitioningSucceed) { ... @@ -1475,11 +1475,11 @@ namespace AMDiS { ... @@ -1475,11 +1475,11 @@ namespace AMDiS { // Note that also if there are no macros to be deleted, this function will // Note that also if there are no macros to be deleted, this function will // update the number of elements, vertices, etc. of the mesh. // update the number of elements, vertices, etc. of the mesh. mesh->removeMacroElements(deleteMacroElements, uniqueFeSpaces); mesh->removeMacroElements(deleteMacroElements, feSpaces); // === Remove double DOFs. === // === Remove double DOFs. === MeshManipulation meshManipulation(mesh); MeshManipulation meshManipulation(mesh); meshManipulation.deleteDoubleDofs(uniqueFeSpaces, newMacroEl, elObjDb); meshManipulation.deleteDoubleDofs(feSpaces, newMacroEl, elObjDb); mesh->dofCompress(); mesh->dofCompress(); partitioner->createPartitionMap(partitionMap); partitioner->createPartitionMap(partitionMap); ... @@ -1515,7 +1515,7 @@ namespace AMDiS { ... @@ -1515,7 +1515,7 @@ namespace AMDiS { ParallelDebug::writePartitioningFile(debugOutputDir + "partitioning", ParallelDebug::writePartitioningFile(debugOutputDir + "partitioning", repartitioningCounter, repartitioningCounter, uniqueFeSpaces[0]); feSpaces[0]); ParallelDebug::testAllElements(*this); ParallelDebug::testAllElements(*this); ParallelDebug::testDoubleDofs(mesh); ParallelDebug::testDoubleDofs(mesh); ParallelDebug::testInteriorBoundary(*this); ParallelDebug::testInteriorBoundary(*this); ... @@ -1561,11 +1561,11 @@ namespace AMDiS { ... @@ -1561,11 +1561,11 @@ namespace AMDiS { // === Create DOF communicator. === // === Create DOF communicator. === dofComm.init(0, levelData, uniqueFeSpaces); dofComm.init(0, levelData, feSpaces); dofComm.create(intBoundary); dofComm.create(intBoundary); if (levelData.getLevelNumber() > 1) { if (levelData.getLevelNumber() > 1) { dofCommSd.init(0, levelData, uniqueFeSpaces); dofCommSd.init(0, levelData, feSpaces); dofCommSd.create(intBoundarySd); dofCommSd.create(intBoundarySd); } } ... @@ -1577,8 +1577,8 @@ namespace AMDiS { ... @@ -1577,8 +1577,8 @@ namespace AMDiS { int nLevels = levelData.getLevelNumber(); int nLevels = levelData.getLevelNumber(); boundaryDofInfo.resize(nLevels); boundaryDofInfo.resize(nLevels); for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) { for (unsigned int i = 0; i < feSpaces.size(); i++) { const FiniteElemSpace *feSpace = uniqueFeSpaces[i]; const FiniteElemSpace *feSpace = feSpaces[i]; for (int level = 0; level < nLevels; level++) { for (int level = 0; level < nLevels; level++) { ... @@ -1630,7 +1630,7 @@ namespace AMDiS { ... @@ -1630,7 +1630,7 @@ namespace AMDiS { if (partitioner->getElementInRank()[(*it)->getIndex()] == false) if (partitioner->getElementInRank()[(*it)->getIndex()] == false) macrosToRemove.insert(*it); macrosToRemove.insert(*it); mesh->removeMacroElements(macrosToRemove, uniqueFeSpaces); mesh->removeMacroElements(macrosToRemove, feSpaces); } } ... @@ -1651,13 +1651,13 @@ namespace AMDiS { ... @@ -1651,13 +1651,13 @@ namespace AMDiS { int nLevels = levelData.getLevelNumber(); int nLevels = levelData.getLevelNumber(); TEST_EXIT_DBG(nLevels >= 1)("Should not happen!\n"); TEST_EXIT_DBG(nLevels >= 1)("Should not happen!\n"); dofMap.init(levelData, componentSpaces, uniqueFeSpaces); dofMap.init(levelData, componentSpaces, feSpaces); dofMap.setMpiComm(levelData.getMpiComm(0), 0); dofMap.setMpiComm(levelData.getMpiComm(0), 0); dofMap.setDofComm(dofComm); dofMap.setDofComm(dofComm); dofMap.clear(); dofMap.clear(); if (nLevels > 1) { if (nLevels > 1) { dofMapSd.init(levelData, componentSpaces, uniqueFeSpaces); dofMapSd.init(levelData, componentSpaces, feSpaces); dofMapSd.setMpiComm(levelData.getMpiComm(1), 1); dofMapSd.setMpiComm(levelData.getMpiComm(1), 1); dofMapSd.setDofComm(dofCommSd); dofMapSd.setDofComm(dofCommSd); dofMapSd.clear(); dofMapSd.clear(); ... @@ -1665,13 +1665,13 @@ namespace AMDiS { ... @@ -1665,13 +1665,13 @@ namespace AMDiS { createBoundaryDofs(); createBoundaryDofs(); for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) for (unsigned int i = 0; i < feSpaces.size(); i++) updateLocalGlobalNumbering(dofMap, dofComm, uniqueFeSpaces[i]); updateLocalGlobalNumbering(dofMap, dofComm, feSpaces[i]); dofMap.update(); dofMap.update(); if (nLevels > 1) { if (nLevels > 1) { for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) for (unsigned int i = 0; i < feSpaces.size(); i++) updateLocalGlobalNumbering(dofMapSd, dofCommSd, uniqueFeSpaces[i]); updateLocalGlobalNumbering(dofMapSd, dofCommSd, feSpaces[i]); dofMapSd.update(); dofMapSd.update(); } } ... @@ -1685,28 +1685,28 @@ namespace AMDiS { ... @@ -1685,28 +1685,28 @@ namespace AMDiS { MSG("------------- Debug information -------------\n"); MSG("------------- Debug information -------------\n"); MSG("| number of levels: %d\n", nLevels); MSG("| number of levels: %d\n", nLevels); MSG("| number of FE spaces: %d\n", uniqueFeSpaces.size()); MSG("| number of FE spaces: %d\n", feSpaces.size()); for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) { for (unsigned int i = 0; i < feSpaces.size(); i++) { MSG("| FE space = %d (pointer adr %p):\n", i, uniqueFeSpaces[i]); MSG("| FE space = %d (pointer adr %p):\n", i, feSpaces[i]); MSG("| nRankDofs = %d\n", dofMap[uniqueFeSpaces[i]].nRankDofs); MSG("| nRankDofs = %d\n", dofMap[feSpaces[i]].nRankDofs); MSG("| nOverallDofs = %d\n", dofMap[uniqueFeSpaces[i]].nOverallDofs); MSG("| nOverallDofs = %d\n", dofMap[feSpaces[i]].nOverallDofs); MSG("| rStartDofs = %d\n", dofMap[uniqueFeSpaces[i]].rStartDofs); MSG("| rStartDofs = %d\n", dofMap[feSpaces[i]].rStartDofs); } } if (nLevels > 1) { if (nLevels > 1) { for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) { for (unsigned int i = 0; i < feSpaces.size(); i++) { MSG("| FE space = %d:\n", i); MSG("| FE space = %d:\n", i); MSG("| nRankDofs = %d\n", dofMapSd[uniqueFeSpaces[i]].nRankDofs); MSG("| nRankDofs = %d\n", dofMapSd[feSpaces[i]].nRankDofs); MSG("| nOverallDofs = %d\n", dofMapSd[uniqueFeSpaces[i]].nOverallDofs); MSG("| nOverallDofs = %d\n", dofMapSd[feSpaces[i]].nOverallDofs); MSG("| rStartDofs = %d\n", dofMapSd[uniqueFeSpaces[i]].rStartDofs); MSG("| rStartDofs = %d\n", dofMapSd[feSpaces[i]].rStartDofs); } } } } // debug::writeElementIndexMesh(mesh, debugOutputDir + "elementIndex-" + // debug::writeElementIndexMesh(mesh, debugOutputDir + "elementIndex-" + // lexical_cast(mpiRank) + ".vtu"); // lexical_cast(mpiRank) + ".vtu"); ParallelDebug::writeDebugFile(uniqueFeSpaces[uniqueFeSpaces.size() - 1], ParallelDebug::writeDebugFile(feSpaces[feSpaces.size() - 1], dofMap, dofMap, debugOutputDir + "mpi-dbg", "dat"); debugOutputDir + "mpi-dbg", "dat"); debug::testSortedDofs(mesh, elMap); debug::testSortedDofs(mesh, elMap); ... @@ -1718,15 +1718,15 @@ namespace AMDiS { ... @@ -1718,15 +1718,15 @@ namespace AMDiS { ParallelDebug::testGlobalIndexByCoords(*this); ParallelDebug::testGlobalIndexByCoords(*this); } } #else #else for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) for (unsigned int i = 0; i < feSpaces.size(); i++) MSG("FE space %d: nRankDofs = %d nOverallDofs = %d\n", MSG("FE space %d: nRankDofs = %d nOverallDofs = %d\n", i, dofMap[uniqueFeSpaces[i]].nRankDofs, i, dofMap[feSpaces[i]].nRankDofs, dofMap[uniqueFeSpaces[i]].nOverallDofs); dofMap[feSpaces[i]].nOverallDofs); int tmp = 0; int tmp = 0; Parameters::get(name + "->write parallel debug file", tmp); Parameters::get(name + "->write parallel debug file", tmp); if (tmp) if (tmp) ParallelDebug::writeDebugFile(uniqueFeSpaces[uniqueFeSpaces.size() - 1], ParallelDebug::writeDebugFile(feSpaces[feSpaces.size() - 1], dofMap, dofMap, debugOutputDir + "mpi-dbg", "dat"); debugOutputDir + "mpi-dbg", "dat"); #endif #endif ... @@ -1784,8 +1784,8 @@ namespace AMDiS { ... @@ -1784,8 +1784,8 @@ namespace AMDiS { // MPI::COMM_WORLD.Barrier(); [TODO: CHANGE BECAUSE NOT ALL RANKS HAVE PERIODIC MAP!!!] // MPI::COMM_WORLD.Barrier(); [TODO: CHANGE BECAUSE NOT ALL RANKS HAVE PERIODIC MAP!!!] double first = MPI::Wtime(); double first = MPI::Wtime(); for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) for (unsigned int i = 0; i < feSpaces.size(); i++) createPeriodicMap(uniqueFeSpaces[i]); createPeriodicMap(feSpaces[i]); // MPI::COMM_WORLD.Barrier(); // MPI::COMM_WORLD.Barrier(); INFO(info, 8)("Creation of periodic mapping needed %.5f seconds\n", INFO(info, 8)("Creation of periodic mapping needed %.5f seconds\n", ... @@ -2022,14 +2022,14 @@ namespace AMDiS { ... @@ -2022,14 +2022,14 @@ namespace AMDiS { // Create a map from DOF indices to the corresponding DOF pointers. // Create a map from DOF indices to the corresponding DOF pointers. map > dofIndexMap; map > dofIndexMap; for (unsigned int i = 0; i < uniqueFeSpaces.size(); i++) { for (unsigned int i = 0; i < feSpaces.size(); i++) { ElementDofIterator elDofIter(uniqueFeSpaces[i]); ElementDofIterator elDofIter(feSpaces[i]); TraverseStack stack; TraverseStack stack; ElInfo *elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_LEAF_EL); ElInfo *elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_LEAF_EL); while (elInfo) { while (elInfo) { elDofIter.reset(elInfo->getElement()); elDofIter.reset(elInfo->getElement()); do { do { dofIndexMap[uniqueFeSpaces[i]][elDofIter.getDof()] = elDofIter.getDofPtr(); dofIndexMap[feSpaces[i]][elDofIter.getDof()] = elDofIter.getDofPtr(); } while (elDofIter.next()); } while (elDofIter.next()); elInfo = stack.traverseNext(elInfo); elInfo = stack.traverseNext(elInfo); ... ...
 ... @@ -137,20 +137,20 @@ namespace AMDiS { ... @@ -137,20 +137,20 @@ namespace AMDiS { { { FUNCNAME("MeshDistributor::getFeSpace()"); FUNCNAME("MeshDistributor::getFeSpace()"); TEST_EXIT_DBG(i < uniqueFeSpaces.size()) TEST_EXIT_DBG(i < feSpaces.size()) ("Try to access FE space %d, but have only %d FE spaces!\n", ("Try to access FE space %d, but have only %d FE spaces!\n", i, uniqueFeSpaces.size()); i, feSpaces.size()); return uniqueFeSpaces[i]; return feSpaces[i]; } } /// Returns all FE spaces, thus \ref feSpaces. /// Returns all FE spaces, thus \ref feSpaces. inline vector& getFeSpaces() inline vector& getFeSpaces() { { return uniqueFeSpaces; return feSpaces; } } inline const FiniteElemSpace* getComponentFeSpace(unsigned int i = 0) inline const FiniteElemSpace* getComponentSpace(unsigned int i = 0) { { FUNCNAME("MeshDistributor::getFeSpace()"); FUNCNAME("MeshDistributor::getFeSpace()"); ... @@ -159,7 +159,7 @@ namespace AMDiS { ... @@ -159,7 +159,7 @@ namespace AMDiS { return componentSpaces[i]; return componentSpaces[i]; } } inline vector& getComponentFeSpaces() inline vector& getComponentSpaces() { { return componentSpaces; return componentSpaces; } } ... @@ -504,7 +504,8 @@ namespace AMDiS { ... @@ -504,7 +504,8 @@ namespace AMDiS { /// Finite element spaces of the problem. /// Finite element spaces of the problem. vector componentSpaces; vector componentSpaces; vector uniqueFeSpaces; /// Set of all different FE spaces. vector feSpaces; /// Mesh of the problem. /// Mesh of the problem. ... ...
 ... @@ -115,7 +115,8 @@ namespace AMDiS { ... @@ -115,7 +115,8 @@ namespace AMDiS { if (checkMeshChange()) { if (checkMeshChange()) { // Mesh has been changed, recompute interior DOF mapping. // Mesh has been changed, recompute interior DOF mapping. vector feSpaces = getComponentFeSpaces(seqMat); vector feSpaces = meshDistributor->getComponentSpaces(); interiorMap->setComputeMatIndex(!localMatrix); interiorMap->setComputeMatIndex(!localMatrix); interiorMap->update(); interiorMap->update(); ... ...
 ... @@ -164,7 +164,7 @@ namespace AMDiS { ... @@ -164,7 +164,7 @@ namespace AMDiS { perMap.periodicDofAssociations[feSpace].begin(); perMap.periodicDofAssociations[feSpace].begin(); it != perMap.periodicDofAssociations[feSpace].end(); ++it) { it != perMap.periodicDofAssociations[feSpace].end(); ++it) { WorldVector c; WorldVector c; pdb.mesh->getDofIndexCoords(it->first, pdb.uniqueFeSpaces[0], c); pdb.mesh->getDofIndexCoords(it->first, pdb.feSpaces[0], c); int nAssoc = it->second.size(); int nAssoc = it->second.size(); } } ... @@ -329,7 +329,7 @@ namespace AMDiS { ... @@ -329,7 +329,7 @@ namespace AMDiS { clock_t first = clock(); clock_t first = clock(); // Get FE space with basis functions of the highest degree // Get FE space with basis functions of the highest degree const FiniteElemSpace *feSpace = pdb.uniqueFeSpaces[pdb.uniqueFeSpaces.size() - 1]; const FiniteElemSpace *feSpace = pdb.feSpaces[pdb.feSpaces.size() - 1]; int testCommonDofs = 1; int testCommonDofs = 1; Parameters::get("dbg->test common dofs", testCommonDofs); Parameters::get("dbg->test common dofs", testCommonDofs); ... @@ -471,7 +471,7 @@ namespace AMDiS { ... @@ -471,7 +471,7 @@ namespace AMDiS { FUNCNAME("ParallelDebug::testGlobalIndexByCoords()"); FUNCNAME("ParallelDebug::testGlobalIndexByCoords()"); // Get FE space with basis functions of the highest degree // Get FE space with basis functions of the highest degree const FiniteElemSpace *feSpace = pdb.uniqueFeSpaces[pdb.uniqueFeSpaces.size() - 1]; const FiniteElemSpace *feSpace = pdb.feSpaces[pdb.feSpaces.size() - 1];