Vlasiator ebf0dd394 on dev (v5.4.0 + 1054 commits)
Loading...
Searching...
No Matches
velocity_mesh_cpu.h
Go to the documentation of this file.
1/*
2 * This file is part of Vlasiator.
3 * Copyright 2010-2024 Finnish Meteorological Institute and University of Helsinki
4 *
5 * For details of usage, see the COPYING file and read the "Rules of the Road"
6 * at http://www.physics.helsinki.fi/vlasiator/
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22
23#ifndef VELOCITY_MESH_CPU_H
24#define VELOCITY_MESH_CPU_H
25
26#include <iostream>
27#include <algorithm>
28#include <sstream>
29#include <stdint.h>
30#include <vector>
31#include <unordered_map>
32#include <set>
33#include <cmath>
34
35//#include "object_wrapper.h"
38
39#if defined(DEBUG_VLASIATOR) || defined(DEBUG_SPATIAL_CELL)
40 #ifndef DEBUG_VMESH
41 #define DEBUG_VMESH
42 #endif
43#endif
44
45namespace vmesh {
46
48 public:
51 VelocityMesh(const VelocityMesh& other);
52 const VelocityMesh& operator=(const VelocityMesh& other);
53
54 size_t capacityInBytes() const;
55 bool check() const;
56 void clear(bool shrink=false);
57 void clearMap(const vmesh::LocalID& newSize);
58 bool move(const vmesh::LocalID& sourceLocalID,const vmesh::LocalID& targetLocalID);
59 size_t count(const vmesh::GlobalID& globalID) const;
60 vmesh::GlobalID findBlock(vmesh::GlobalID cellIndices[3]) const;
61 bool getBlockCoordinates(const vmesh::GlobalID& globalID,Real coords[3]) const;
62 void getBlockInfo(const vmesh::GlobalID& globalID,Real* array) const;
63 const Real* getBlockSize() const;
64 bool getBlockSize(const vmesh::GlobalID& globalID,Real size[3]) const;
65 const Real* getCellSize() const;
66 bool getCellSize(const vmesh::GlobalID& globalID,Real size[3]) const;
67 vmesh::GlobalID getGlobalID(const vmesh::LocalID& localID) const;
68 vmesh::GlobalID getGlobalID(const Real* coords) const;
72 std::vector<vmesh::GlobalID>* getGrid();
73 const vmesh::LocalID* getGridLength() const;
74// void getNeighbors(const GlobalID& globalID,std::vector<GlobalID>& neighborIDs);
76 size_t getMesh() const;
77 vmesh::LocalID getLocalID(const vmesh::GlobalID& globalID) const;
79 const Real* getMeshMaxLimits() const;
80 const Real* getMeshMinLimits() const;
81 bool initialize(const size_t& meshID);
85 bool isInitialized() const;
86 void pop();
87 bool push_back(const vmesh::GlobalID& globalID);
88 bool push_back(const std::vector<vmesh::GlobalID>& blocks);
89 void setGrid();
90 bool setGrid(const std::vector<vmesh::GlobalID>& globalIDs);
91 bool setMesh(const size_t& meshID);
92 void setNewSize(const vmesh::LocalID& newSize);
93 void setNewCapacity(const vmesh::LocalID& newCapacity);
94 size_t size(bool dummy=0) const;
95 size_t sizeInBytes() const;
96 // void swap(VelocityMesh& vm);
97
98 private:
99 size_t meshID;
100
101 std::vector<vmesh::GlobalID> localToGlobalMap;
103 //std::unordered_map<vmesh::GlobalID,vmesh::LocalID> globalToLocalMap;
104 };
105
106 // ***** DEFINITIONS OF TEMPLATE MEMBER FUNCTIONS ***** //
107
109 meshID = std::numeric_limits<size_t>::max();
111 localToGlobalMap = std::vector<vmesh::GlobalID>(1);
112 localToGlobalMap.clear();
113 }
114
116
118 meshID = other.meshID;
120 if (other.localToGlobalMap.size() > 0) {
121 localToGlobalMap = std::vector<vmesh::GlobalID>(other.localToGlobalMap);
122 } else {
123 localToGlobalMap = std::vector<vmesh::GlobalID>(1);
124 localToGlobalMap.clear();
125 }
126 }
127
129 meshID = other.meshID;
131 if (other.localToGlobalMap.size() > 0) {
132 localToGlobalMap = std::vector<vmesh::GlobalID>(other.localToGlobalMap);
133 } else {
134 localToGlobalMap = std::vector<vmesh::GlobalID>(1);
135 localToGlobalMap.clear();
136 }
137 return *this;
138 }
139
140 inline size_t VelocityMesh::capacityInBytes() const {
141 return localToGlobalMap.capacity()*sizeof(vmesh::GlobalID)
142 + globalToLocalMap.bucket_count()*(sizeof(vmesh::GlobalID)+sizeof(vmesh::LocalID));
143 }
144
145 inline bool VelocityMesh::check() const {
146 bool ok = true;
147
148 if (localToGlobalMap.size() != globalToLocalMap.size()) {
149 std::cerr << "VMO ERROR: sizes differ, " << localToGlobalMap.size() << " vs " << globalToLocalMap.size() << std::endl;
150 ok = false;
151 exit(1);
152 }
153
154 for (size_t b=0; b<size(); ++b) {
155 const vmesh::LocalID globalID = localToGlobalMap.at(b);
156 auto it = globalToLocalMap.find(globalID);
157 const vmesh::GlobalID localID = it->second;
158 if (localID != b) {
159 ok = false;
160 std::cerr << "VMO ERROR: localToGlobalMap[" << b << "] = " << globalID << " but ";
161 std::cerr << "globalToLocalMap[" << globalID << "] = " << localID << std::endl;
162 exit(1);
163 }
164 }
165
166 return ok;
167 }
168
169 inline void VelocityMesh::clear(bool shrink) {
170 if (shrink) {
172 localToGlobalMap = std::vector<vmesh::GlobalID>(1);
173 localToGlobalMap.clear();
174 } else {
175 globalToLocalMap.clear();
176 localToGlobalMap.clear();
177 }
178 }
179 inline void VelocityMesh::clearMap(const vmesh::LocalID& newSize) {
180 globalToLocalMap.clear();
181 //globalToLocalMap.reserve(newSize); //OpenBucketHashTable does not have a reserve function
182 }
183
184 inline bool VelocityMesh::move(const vmesh::LocalID& sourceLID,const vmesh::LocalID& targetLID) {
185 const vmesh::GlobalID moveGID = localToGlobalMap.at(sourceLID); // block to move (at the end of list)
186 const vmesh::GlobalID removeGID = localToGlobalMap.at(targetLID); // removed block
187 #ifdef DEBUG_VMESH
188 if (sourceLID != size()-1) {
189 printf("Warning! Moving velocity mesh entry from position which is not last LID!\n");
190 }
191 #endif
192 // at-function will throw out_of_range exception for non-existing global ID:
193 globalToLocalMap.at(moveGID) = targetLID;
194 globalToLocalMap.erase(removeGID);
195 localToGlobalMap.at(targetLID) = moveGID;
196 localToGlobalMap.pop_back();
197 return true;
198 }
199
200 inline size_t VelocityMesh::count(const vmesh::GlobalID& globalID) const {
201 return globalToLocalMap.count(globalID);
202 }
203
205 // Calculate i/j/k indices of the block that would own the cell:
206 vmesh::GlobalID i_block = cellIndices[0] / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockLength[0];
207 vmesh::GlobalID j_block = cellIndices[1] / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockLength[1];
208 vmesh::GlobalID k_block = cellIndices[2] / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockLength[2];
209
210 // Calculate block global ID:
211 vmesh::GlobalID blockGID = getGlobalID(i_block,j_block,k_block);
212
213 // If the block exists, return it:
214 if (globalToLocalMap.find(blockGID) != globalToLocalMap.end()) {
215 return blockGID;
216 } else {
217 return invalidGlobalID();
218 }
219 }
220
221/*
222 inline const vmesh::GlobalID* VelocityMesh::getBaseGridLength() {
223 return gridLength;
224 }
225
226 inline const Real* VelocityMesh::getBaseGridBlockSize() {
227 return blockSize;
228 }
229
230 inline const Real* VelocityMesh::getBaseGridCellSize() {
231 return cellSize;
232 }
233*/
234 inline bool VelocityMesh::getBlockCoordinates(const vmesh::GlobalID& globalID,Real coords[3]) const {
235 if (globalID == invalidGlobalID()) {
237 return false;
238 }
239
240 vmesh::LocalID indices[3];
241 getIndices(globalID,indices[0],indices[1],indices[2]);
242 if (indices[0] == invalidBlockIndex()) {
244 return false;
245 }
246
247 coords[0] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[0] + indices[0]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[0];
248 coords[1] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[1] + indices[1]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[1];
249 coords[2] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[2] + indices[2]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[2];
250 return true;
251 }
252
253 inline void VelocityMesh::getBlockInfo(const vmesh::GlobalID& globalID,Real* array) const {
254 #ifdef DEBUG_VMESH
255 if (globalID == invalidGlobalID()) {
257 }
258 #endif
259
260 vmesh::LocalID indices[3];
261 indices[0] = globalID % (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0];
262 indices[1] = (globalID / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0]) % (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1];
263 indices[2] = globalID / ((*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0] * (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1]);
264
265 // Indices 0-2 contain coordinates of the lower left corner.
266 // The values are the same as if getBlockCoordinates(globalID,&(array[0])) was called
267 array[0] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[0] + indices[0]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[0];
268 array[1] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[1] + indices[1]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[1];
269 array[2] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[2] + indices[2]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[2];
270
271 // Indices 3-5 contain the cell size.
272 // The values are the same as if getCellSize(globalID,&(array[3])) was called
273 array[3] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].cellSize[0];
274 array[4] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].cellSize[1];
275 array[5] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].cellSize[2];
276 }
277
278 inline const Real* VelocityMesh::getBlockSize() const {
279 return (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize;
280 }
281
288
289 inline const Real* VelocityMesh::getCellSize() const {
290 return (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].cellSize;
291 }
292
293 inline bool VelocityMesh::getCellSize(const vmesh::GlobalID& globalID,Real size[3]) const {
294 size[0] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].cellSize[0];
295 size[1] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].cellSize[1];
296 size[2] = (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].cellSize[2];
297 return true;
298 }
299
301 #ifdef DEBUG_VMESH
302 if (localID >= localToGlobalMap.size()) {
303 std::cerr << "ERROR invalid local id" << std::endl; exit(1);
304 }
305 #endif
306
307 return localToGlobalMap.at(localID);
308 }
309
310 inline vmesh::GlobalID VelocityMesh::getGlobalID(const Real* coords) const {
311 if (coords[0] < (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[0] || coords[0] >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMaxLimits[0] ||
312 (coords[1] < (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[1] || coords[1] >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMaxLimits[1] ||
313 coords[2] < (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[2] || coords[2] >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMaxLimits[2])) {
314 return invalidGlobalID();
315 }
316
317 const vmesh::LocalID indices[3] = {
318 static_cast<vmesh::LocalID>(floor((coords[0] - (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[0]) / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[0])),
319 static_cast<vmesh::LocalID>(floor((coords[1] - (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[1]) / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[1])),
320 static_cast<vmesh::LocalID>(floor((coords[2] - (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits[2]) / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].blockSize[2]))
321 };
322
323 return indices[2]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0]
324 + indices[1]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0] + indices[0];
325 }
326
328 if (indices[0] >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0]) {
329 return invalidGlobalID();
330 }
331 if (indices[1] >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1]) {
332 return invalidGlobalID();
333 }
334 if (indices[2] >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[2]) {
335 return invalidGlobalID();
336 }
337 return indices[2]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0]
338 + indices[1]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0] + indices[0];
339 }
340
342 if (i >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0] || j >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1] || k >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[2]) {
343 return invalidGlobalID();
344 }
345 return i + j*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0]
346 + k*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0]*(*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1];
347 }
348
352
353 inline std::vector<vmesh::GlobalID>* VelocityMesh::getGrid() {
354 return &localToGlobalMap;
355 }
356
358 return (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength;
359 }
360
362 if (globalID >= invalidGlobalID()) {
363 i = j = k = invalidBlockIndex();
364 } else {
365 i = globalID % (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0];
366 j = (globalID / (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0]) % (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1];
367 k = globalID / ((*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[0] * (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].gridLength[1]);
368 }
369 }
370
372 auto it = globalToLocalMap.find(globalID);
373 if (it != globalToLocalMap.end()) {
374 return it->second;
375 }
376 return invalidLocalID();
377 }
378
380 return (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].max_velocity_blocks;
381 }
382
383 inline size_t VelocityMesh::getMesh() const {
384 return meshID;
385 }
386
387 inline const Real* VelocityMesh::getMeshMaxLimits() const {
388 return (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMaxLimits;
389 }
390
391 inline const Real* VelocityMesh::getMeshMinLimits() const {
392 return (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].meshMinLimits;
393 }
394
395 inline bool VelocityMesh::initialize(const size_t& meshID) {
396 this->meshID = meshID;
397 return true;
398 }
399
403
407
411
412 inline bool VelocityMesh::isInitialized() const {
413 return (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].initialized;
414 }
415
416 inline void VelocityMesh::pop() {
417 if (size() == 0) {
418 return;
419 }
420
421 const vmesh::LocalID lastLID = size()-1;
422 const vmesh::GlobalID lastGID = localToGlobalMap.at(lastLID);
423 auto last = globalToLocalMap.find(lastGID);
424
425 globalToLocalMap.erase(last);
426 localToGlobalMap.pop_back();
427 }
428
429 inline bool VelocityMesh::push_back(const vmesh::GlobalID& globalID) {
430 if (size() >= (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].max_velocity_blocks) {
431 return false;
432 }
433 if (globalID == invalidGlobalID()) {
434 return false;
435 }
436
437 auto position
438 = globalToLocalMap.insert(std::make_pair(globalID,localToGlobalMap.size()));
439
440 if (position.second == true) {
441 localToGlobalMap.push_back(globalID);
442 }
443
444 return position.second;
445 }
446
447 inline bool VelocityMesh::push_back(const std::vector<vmesh::GlobalID>& blocks) {
448 if (size()+blocks.size() > (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].max_velocity_blocks) {
449 std::cerr << "vmesh: too many blocks, current size is " << size();
450 std::cerr << ", adding " << blocks.size() << " blocks";
451 std::cerr << ", max is " << (*vmesh::getMeshWrapper()->velocityMeshes)[meshID].max_velocity_blocks << std::endl;
452 return false;
453 }
454
455 for (size_t b=0; b<blocks.size(); ++b) {
456 globalToLocalMap.insert(std::make_pair(blocks[b],localToGlobalMap.size()+b));
457 }
458 localToGlobalMap.insert(localToGlobalMap.end(),blocks.begin(),blocks.end());
459
460 return true;
461 }
462
463 inline void VelocityMesh::setGrid() {
464 globalToLocalMap.clear();
465 for (size_t i=0; i<localToGlobalMap.size(); ++i) {
466 globalToLocalMap.insert(std::make_pair(localToGlobalMap.at(i),i));
467 }
468 }
469
470 inline bool VelocityMesh::setGrid(const std::vector<vmesh::GlobalID>& globalIDs) {
471 globalToLocalMap.clear();
472 for (vmesh::LocalID i=0; i<globalIDs.size(); ++i) {
473 globalToLocalMap.insert(std::make_pair(globalIDs[i],i));
474 }
475 localToGlobalMap.clear();
476 localToGlobalMap.insert(localToGlobalMap.end(),globalIDs.begin(),globalIDs.end());
477 return true;
478 }
479
480 inline bool VelocityMesh::setMesh(const size_t& meshID) {
481 if (meshID >= vmesh::getMeshWrapper()->velocityMeshes->size()) {
482 return false;
483 }
484 this->meshID = meshID;
485 return true;
486 }
487
488 inline void VelocityMesh::setNewSize(const vmesh::LocalID& newSize) {
489 localToGlobalMap.resize(newSize);
490 }
491
492 // Used in initialization
493 inline void VelocityMesh::setNewCapacity(const vmesh::LocalID& newCapacity) {
494 localToGlobalMap.reserve(newCapacity);
495 }
496
497 inline size_t VelocityMesh::size(bool dummy) const {
498 (void) dummy; // GPU mesh compatibility
499 return localToGlobalMap.size();
500 }
501
502 inline size_t VelocityMesh::sizeInBytes() const {
503 return globalToLocalMap.size()*sizeof(vmesh::GlobalID)
504 + localToGlobalMap.size()*(sizeof(vmesh::GlobalID)+sizeof(vmesh::LocalID));
505 }
506
507 // inline void VelocityMesh::swap(VelocityMesh& vm) {
508 // globalToLocalMap.swap(vm.globalToLocalMap);
509 // localToGlobalMap.swap(vm.localToGlobalMap);
510 // }
511
512} // namespace vmesh
513
514#endif
for i
Definition Dispersion.m:24
void setNewCapacity(const vmesh::LocalID &newCapacity)
vmesh::GlobalID getGlobalIndexOffset()
const vmesh::LocalID * getGridLength() const
bool push_back(const vmesh::GlobalID &globalID)
const VelocityMesh & operator=(const VelocityMesh &other)
OpenBucketHashtable< vmesh::GlobalID, vmesh::LocalID > globalToLocalMap
static vmesh::LocalID invalidBlockIndex()
ARCH_HOSTDEV size_t size() const
bool getBlockCoordinates(const vmesh::GlobalID &globalID, Real coords[3]) const
std::vector< vmesh::GlobalID > * getGrid()
void clearMap(const vmesh::LocalID &newSize)
static vmesh::LocalID invalidLocalID()
const Real * getMeshMaxLimits() const
bool move(const vmesh::LocalID &sourceLocalID, const vmesh::LocalID &targetLocalID)
const Real * getBlockSize() const
bool setMesh(const size_t &meshID)
void setNewSize(const vmesh::LocalID &newSize)
size_t count(const vmesh::GlobalID &globalID) const
const Real * getMeshMinLimits() const
vmesh::LocalID getLocalID(const vmesh::GlobalID &globalID) const
void clear(bool shrink=false)
vmesh::GlobalID findBlock(vmesh::GlobalID cellIndices[3]) const
size_t sizeInBytes() const
const Real * getCellSize() const
std::vector< vmesh::GlobalID > localToGlobalMap
vmesh::GlobalID getGlobalID(const vmesh::LocalID &localID) const
vmesh::GlobalID getMaxVelocityBlocks() const
static vmesh::GlobalID invalidGlobalID()
size_t size(bool dummy=0) const
bool initialize(const size_t &meshID)
void getIndices(const vmesh::GlobalID &globalID, vmesh::LocalID &i, vmesh::LocalID &j, vmesh::LocalID &k) const
size_t capacityInBytes() const
void getBlockInfo(const vmesh::GlobalID &globalID, Real *array) const
float Real
Definition definitions.h:41
const int blockSize
const int j
const int k
static const LocalID INVALID_LOCALID
Definition definitions.h:66
static const GlobalID INVALID_GLOBALID
Definition definitions.h:63
uint32_t LocalID
Definition definitions.h:60
uint32_t GlobalID
Definition definitions.h:59
ARCH_HOSTDEV MeshWrapper * getMeshWrapper()
static const LocalID INVALID_VEL_BLOCK_INDEX
Definition definitions.h:69
std::array< vmesh::MeshParameters, MAX_VMESH_PARAMETERS_COUNT > * velocityMeshes
static ARCH_HOSTDEV VecSimple< T > floor(VecSimple< T > const &a)