59 *
static_cast<size_t>(qReconstructedCardinality);
60 const size_t totalQSize = qSize + qReconstructedSize;
77 tarch::MemoryLocation::Device
82 qReconstructedCardinality,
83 tarch::MemoryLocation::Device
90 std::vector<double> hostGlobalFacePool;
91 std::vector<uint64_t> indicesOfBoundaryFacesIntoGlobalFacePool;
92 std::vector<uint8_t> hostBoundaryFaceNumbers;
93 std::vector<uint64_t> hostBoundaryCellIndices;
99 for (
int f = 0; f < TWO_TIMES_D; ++f) {
101 const double ratio = DomainSize[0] /
cellSize[0];
102 const int depth =
static_cast<int>(std::round(std::log(ratio) / std::log(3.0)));
107 uint64_t globalFaceIndex;
113 double* srcFaceData = hostRepo.
getFaceQNew(std::get<0>(faceKey), std::get<1>(faceKey), std::get<2>(faceKey));
114 hostGlobalFacePool.insert(hostGlobalFacePool.end(), srcFaceData, srcFaceData + faceCardinality);
121 tarch::la::Vector<DIMENSIONS, double> faceCentre(cellCentre);
122 int normal = f % DIMENSIONS;
123 faceCentre(normal) += f >= DIMENSIONS ?
cellSize(normal) / 2.0 : -
cellSize(normal) / 2.0;
124 bool isBoundary =
false;
125 isBoundary |= tarch::la::equals(faceCentre(normal), DomainOffset(normal));
126 isBoundary |= tarch::la::equals(faceCentre(normal), DomainOffset(normal) + DomainSize(normal));
129 indicesOfBoundaryFacesIntoGlobalFacePool.push_back(globalFaceIndex);
130 hostBoundaryFaceNumbers.push_back(f);
131 hostBoundaryCellIndices.push_back(i);
137 _globalFacePoolDevice = tarch::allocateMemory<double>(hostGlobalFacePool.size(), tarch::MemoryLocation::Device);
139 indicesOfBoundaryFacesIntoGlobalFacePool.size(),
140 tarch::MemoryLocation::Device
143 hostBoundaryFaceNumbers.size(),
144 tarch::MemoryLocation::Device
147 hostBoundaryCellIndices.size(),
148 tarch::MemoryLocation::Device
153 hostGlobalFacePool.data(),
154 hostGlobalFacePool.size(),
155 tarch::MemoryLocation::Device
161 indicesOfBoundaryFacesIntoGlobalFacePool.data(),
162 indicesOfBoundaryFacesIntoGlobalFacePool.size(),
163 tarch::MemoryLocation::Device
167 hostBoundaryFaceNumbers.data(),
168 hostBoundaryFaceNumbers.size(),
169 tarch::MemoryLocation::Device
173 hostBoundaryCellIndices.data(),
174 hostBoundaryCellIndices.size(),
175 tarch::MemoryLocation::Device
180 uint64_t* indicesOfFacesHost = tarch::allocateMemory<uint64_t>(
182 tarch::MemoryLocation::Heap
186 tarch::MemoryLocation::Device
192 for (
int f = 0; f < TWO_TIMES_D; ++f) {
194 const double ratio = DomainSize[0] /
cellSize[0];
195 const int depth =
static_cast<int>(std::round(std::log(ratio) / std::log(3.0)));
199 indicesOfFacesHost[f + i * TWO_TIMES_D] = globalFaceIndex;
207 tarch::MemoryLocation::Device
213 tarch::MemoryLocation::Device
215 _cellSizesDevice = tarch::allocateMemory<tarch::la::Vector<DIMENSIONS, double>>(
217 tarch::MemoryLocation::Device
223 tarch::MemoryLocation::Device
228 tarch::freeMemory(indicesOfFacesHost, tarch::MemoryLocation::Heap);
const tarch::la::Vector< DIMENSIONS, double > cellSize