30 std::type_identity_t<Index> dofIdx, std::type_identity_t<Index> periodicDofIdx)
32 auto& periodicDofs = periodicDofMap[dofIdx];
33 if (std::ranges::find(periodicDofs, periodicDofIdx) == periodicDofs.end())
34 periodicDofs.push_back(periodicDofIdx);
50 std::unordered_map<Index, std::vector<Index>> closedMap;
51 for (
const auto& entry : periodicDofMap)
53 if (closedMap.contains(entry.first))
56 std::vector<Index> group{ entry.first };
57 for (std::size_t k = 0; k < group.size(); ++k)
58 if (
const auto it = periodicDofMap.find(group[k]); it != periodicDofMap.end())
59 for (
const auto periodicDofIdx : it->second)
60 if (std::ranges::find(group, periodicDofIdx) == group.end())
61 group.push_back(periodicDofIdx);
63 std::ranges::sort(group);
64 for (
const auto dofIdx : group)
66 auto& periodicDofs = closedMap[dofIdx];
67 for (
const auto periodicDofIdx : group)
68 if (periodicDofIdx != dofIdx)
69 periodicDofs.push_back(periodicDofIdx);
73 periodicDofMap = std::move(closedMap);
void closePeriodicDofMap(std::unordered_map< Index, std::vector< Index > > &periodicDofMap)
Map every degree of freedom to all others it is identified with.
Definition periodicdofmap.hh:48
void addPeriodicallyMappedDof(std::unordered_map< Index, std::vector< Index > > &periodicDofMap, std::type_identity_t< Index > dofIdx, std::type_identity_t< Index > periodicDofIdx)
Register a degree of freedom as periodically mapped to another one.
Definition periodicdofmap.hh:29