312 void allocate(
int cap,
int maxPairs_,
int maxContacts_,
int nShapes,
int nShell,
int nPlanes) {
317 pos =
V3(
"pos", cap);
320 vel =
V3(
"vel", cap);
336 gid =
Vi(
"gid", cap);
337 planeFriction = Kokkos::View<float* [2], CpMem>(
"planeFriction", cap);
338 rad =
Vf(
"rad", cap);
356 bucketCursor = Kokkos::View<int*, CpMem>(
"bucketCursor", 64);
357 mlBucketPerm = Kokkos::View<int*, CpMem>(
"mlBucketPerm", 0);
359 velOffsDev = Kokkos::View<int*, CpMem>(
"velOffsDev", 65);
360 posOffsDev = Kokkos::View<int*, CpMem>(
"posOffsDev", 65);
361 mlOffsDev = Kokkos::View<int*, CpMem>(
"mlOffsDev", 65 * 10);
362 fusedBar = Kokkos::View<unsigned*, CpMem>(
"fusedBar", 32769);
363 bodyWinner = Kokkos::View<long long*, CpMem>(
"bodyWinner", cap);
364 bodyColorMask = Kokkos::View<std::uint64_t*, CpMem>(
"bodyColorMask", cap);
365 asleep = Kokkos::View<unsigned char*, CpMem>(
"asleep", cap);
366 sleepCounter = Kokkos::View<unsigned char*, CpMem>(
"sleepCounter", cap);
367 sleepMovingWall = Kokkos::View<unsigned char*, CpMem>(
"sleepMovingWall", cap);
368 sleepCurCount = Kokkos::View<int*, CpMem>(
"sleepCurCount", cap);
369 sleepPrevCount = Kokkos::View<int*, CpMem>(
"sleepPrevCount", cap);
370 invMassEff = Kokkos::View<float*, CpMem>(
"invMassEff", cap);
373 impRefPos = Kokkos::View<float* [3], CpMem>(
"impRefPos", cap);
374 impDispMax = Kokkos::View<float, CpMem>(
"impDispMax");
375 groundedLevel = Kokkos::View<unsigned char*, CpMem>(
"groundedLevel", cap);
376 materialId = Kokkos::View<unsigned char*, CpMem>(
"materialId", cap);
387 bodyOrphan = Kokkos::View<float*, CpMem>(
"bodyOrphan", cap);
391 heightLevel = Kokkos::View<int*, CpMem>(
"heightLevel", cap);
395 mlParent = Kokkos::View<int*, CpMem>(
"mlParent", 5 * cap);
396 mlInvMassG = Kokkos::View<float*, CpMem>(
"mlInvMassG", 4 * cap);
397 mlVelG = Kokkos::View<float* [3], CpMem>(
"mlVelG", 4 * cap);
398 mlVelG0 = Kokkos::View<float* [3], CpMem>(
"mlVelG0", 4 * cap);
399 mlMassG = Kokkos::View<float*, CpMem>(
"mlMassG", 4 * cap);
400 mlGrp = Kokkos::View<int*, CpMem>(
"mlGrp", cap);
401 mlMate = Kokkos::View<int*, CpMem>(
"mlMate", cap);
403 hertzWallCand = Kokkos::View<int*, CpMem>(
"hertzWallCand", cap * 2);
406 hertzRefPos = Kokkos::View<float* [3], CpMem>(
"hertzRefPos", cap);
407 hertzDispMax = Kokkos::View<float, CpMem>(
"hertzDispMax");
408 hertzE = Kokkos::View<float*, CpMem>(
"hertzE", 8);
409 hertzNu = Kokkos::View<float*, CpMem>(
"hertzNu", 8);
411 auto he = Kokkos::create_mirror_view(
hertzE);
412 auto hn = Kokkos::create_mirror_view(
hertzNu);
413 for (
int i = 0; i < 8; ++i) {
417 Kokkos::deep_copy(
hertzE, he);
418 Kokkos::deep_copy(
hertzNu, hn);
425 pairCount = Kokkos::View<int, CpMem>(
"pairCount");
426 contactCount = Kokkos::View<int, CpMem>(
"contactCount");
428 topGhost = Kokkos::View<int, CpMem>(
"topGhost");
429 maxOverlap = Kokkos::View<float, CpMem>(
"maxOverlap");
430 maxApproach = Kokkos::View<float, CpMem>(
"maxApproach");
432 shapes = Kokkos::View<ShapeDesc*, CpMem>(
"shapes", nShapes > 0 ? nShapes : 1);
433 shell = Kokkos::View<float* [3], CpMem>(
"shell", nShell > 0 ? nShell : 1);
434 planes = Kokkos::View<PlaneP*, CpMem>(
"planes", nPlanes > 0 ? nPlanes : 1);
435 sdfGrid = Kokkos::View<float*, CpMem>(
"sdfGrid", 1);
436 walls = Kokkos::View<WallSdf*, CpMem>(
"walls", 1);
437 wallGrid = Kokkos::View<float*, CpMem>(
"wallGrid", 1);