Commit ecb93cc3 authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

Fixed FETI-DP for Stokes problem.

parent e8e207b4
...@@ -16,23 +16,4 @@ ...@@ -16,23 +16,4 @@
namespace AMDiS { namespace AMDiS {
vector<const FiniteElemSpace*> getComponentFeSpaces(Matrix<DOFMatrix*> &mat)
{
FUNCNAME("getComponentFeSpaces()");
int nComponents = mat.getNumRows();
vector<const FiniteElemSpace*> 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<const FiniteElemSpace*> getComponentFeSpaces(Matrix<DOFMatrix*> &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<const FiniteElemSpace*> getComponentFeSpaces() inline vector<const FiniteElemSpace*> 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<const FiniteElemSpace*> SystemVector::getComponentFeSpaces() const
{
vector<const FiniteElemSpace*> 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<const FiniteElemSpace*> 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<double> c0, c1; WorldVector<double> 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<string>(mpiRank) + ".vtu"); // lexical_cast<string>(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<const FiniteElemSpace*, map<int, const DegreeOfFreedom*> > dofIndexMap; map<const FiniteElemSpace*, map<int, const DegreeOfFreedom*> > 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<const FiniteElemSpace*>& getFeSpaces() inline vector<const FiniteElemSpace*>& 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<const FiniteElemSpace*>& getComponentFeSpaces() inline vector<const FiniteElemSpace*>& 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<const FiniteElemSpace*> componentSpaces; vector<const FiniteElemSpace*> componentSpaces;
vector<const FiniteElemSpace*> uniqueFeSpaces; /// Set of all different FE spaces.
vector<const FiniteElemSpace*> 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<const FiniteElemSpace*> feSpaces = getComponentFeSpaces(seqMat); vector<const FiniteElemSpace*> 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<double> c; WorldVector<double> 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];