diff --git a/AMDiS/src/Mesh.cc b/AMDiS/src/Mesh.cc index d763d6612e7951b353a251ce7044f4dd8244da15..d56f11cc0ada8eeef4618e757e51d0d045346161 100644 --- a/AMDiS/src/Mesh.cc +++ b/AMDiS/src/Mesh.cc @@ -973,13 +973,17 @@ namespace AMDiS { node.serialize(out); - // write admins + + // === Write admins. === + int size = static_cast<int>(admin.size()); SerUtil::serialize(out, size); for (int i = 0; i < size; i++) admin[i]->serialize(out); - // write macroElements + + // === Write macroElements. === + size = static_cast<int>(macroElements.size()); SerUtil::serialize(out, size); for (int i = 0; i < size; i++) @@ -988,6 +992,30 @@ namespace AMDiS { SerUtil::serialize(out, elementIndex); SerUtil::serialize(out, initialized); + + // === Write periodic associations. === + int mapSize = periodicAssociations.size(); + SerUtil::serialize(out, mapSize); + for (std::map<BoundaryType, VertexVector*>::iterator it = periodicAssociations.begin(); + it != periodicAssociations.end(); ++it) { + BoundaryType b = it->first; + + // Check which DOFAdmin is used for the current VertexVector we want to serialize. + int ithAdmin = -1; + for (int i = 0; i < static_cast<int>(admin.size()); i++) { + if (admin[i] == it->second->getAdmin()) { + ithAdmin = i; + break; + } + } + TEST_EXIT(ithAdmin >= 0) + ("No DOFAdmin found for serialization of periodic associations!\n"); + + SerUtil::serialize(out, b); + SerUtil::serialize(out, ithAdmin); + it->second->serialize(out); + } + serializedDOFs.clear(); } @@ -1027,7 +1055,9 @@ namespace AMDiS { node.deserialize(in); - // read admins + + // === Read admins. === + int size; SerUtil::deserialize(in, size); admin.resize(size, NULL); @@ -1092,6 +1122,22 @@ namespace AMDiS { } serializedDOFs.clear(); + + + /// === Read periodic assoications. === + + int mapSize = 0; + SerUtil::deserialize(in, mapSize); + for (int i = 0; i < mapSize; i++) { + BoundaryType b = 0; + int ithAdmin = 0; + SerUtil::deserialize(in, b); + SerUtil::deserialize(in, ithAdmin); + + VertexVector *tmpvec = new VertexVector(admin[ithAdmin], ""); + tmpvec->deserialize(in); + periodicAssociations[b] = tmpvec; + } } void Mesh::initialize()