Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions blas/src/KokkosBlas1_dot.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ typename Kokkos::Details::InnerProductSpaceTraits<typename XVector::non_const_va
// These special cases are to maintain accuracy.
using result_type = typename KokkosBlas::Impl::DotAccumulatingScalar<dot_type>::type;
using RVector_Internal =
Kokkos::View<dot_type, default_layout, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged>>;
using RVector_Result =
Kokkos::View<result_type, default_layout, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged>>;
Kokkos::View<dot_type, KokkosKernels::default_layout, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged>>;
using RVector_Result = Kokkos::View<result_type, KokkosKernels::default_layout, Kokkos::HostSpace,
Kokkos::MemoryTraits<Kokkos::Unmanaged>>;

XVector_Internal X = x;
YVector_Internal Y = y;
Expand Down
4 changes: 2 additions & 2 deletions blas/src/KokkosBlas1_nrm1.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ typename Kokkos::Details::InnerProductSpaceTraits<typename XVector::non_const_va
typename KokkosKernels::Impl::GetUnifiedLayout<XVector>::array_layout,
typename XVector::device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >;

using RVector_Internal =
Kokkos::View<mag_type, default_layout, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged> >;
using RVector_Internal = Kokkos::View<mag_type, KokkosKernels::default_layout, Kokkos::HostSpace,
Kokkos::MemoryTraits<Kokkos::Unmanaged> >;

mag_type result;
RVector_Internal R = RVector_Internal(&result);
Expand Down
3 changes: 2 additions & 1 deletion blas/src/KokkosBlas1_nrm2_squared.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ typename Kokkos::Details::InnerProductSpaceTraits<typename XVector::non_const_va
typename XVector::device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
XVector_Internal;

typedef Kokkos::View<mag_type, default_layout, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
typedef Kokkos::View<mag_type, KokkosKernels::default_layout, Kokkos::HostSpace,
Kokkos::MemoryTraits<Kokkos::Unmanaged> >
RVector_Internal;

mag_type result;
Expand Down
51 changes: 31 additions & 20 deletions common/src/KokkosKernels_default_types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,57 +20,68 @@
#include "Kokkos_Core.hpp" //for LayoutLeft/LayoutRight
#include <KokkosKernels_config.h> //for all the ETI #cmakedefine macros

// define a deprecated symbol = type in the global namespace
// and a non-deprecated version in Kokkos Kernels
// these deprecations were done in 4.4.
#define KK_IMPL_MAKE_TYPE_ALIAS(symbol, type) \
using symbol [[deprecated("use KokkosKernels::" #symbol ".")]] = type; \
namespace KokkosKernels { \
using symbol = type; \
}

#if defined(KOKKOSKERNELS_INST_ORDINAL_INT)
using default_lno_t = int;
KK_IMPL_MAKE_TYPE_ALIAS(default_lno_t, int)
#elif defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T)
using default_lno_t = int64_t;
KK_IMPL_MAKE_TYPE_ALIAS(default_lno_t, int64_t)
#else
// Non-ETI build: default to int
using default_lno_t = int;
KK_IMPL_MAKE_TYPE_ALIAS(default_lno_t, int)
#endif
// Prefer int as the default offset type, because cuSPARSE doesn't support
// size_t for rowptrs.
#if defined(KOKKOSKERNELS_INST_OFFSET_INT)
using default_size_type = int;
KK_IMPL_MAKE_TYPE_ALIAS(default_size_type, int)
#elif defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T)
using default_size_type = size_t;
KK_IMPL_MAKE_TYPE_ALIAS(default_size_type, size_t)
#else
// Non-ETI build: default to int
using default_size_type = int;
KK_IMPL_MAKE_TYPE_ALIAS(default_size_type, int)
#endif

#if defined(KOKKOSKERNELS_INST_LAYOUTLEFT)
using default_layout = Kokkos::LayoutLeft;
KK_IMPL_MAKE_TYPE_ALIAS(default_layout, Kokkos::LayoutLeft)
#elif defined(KOKKOSKERNELS_INST_LAYOUTRIGHT)
using default_layout = Kokkos::LayoutRight;
KK_IMPL_MAKE_TYPE_ALIAS(default_layout, Kokkos::LayoutRight)
#else
using default_layout = Kokkos::LayoutLeft;
KK_IMPL_MAKE_TYPE_ALIAS(default_layout, Kokkos::LayoutLeft)
#endif

#if defined(KOKKOSKERNELS_INST_DOUBLE)
using default_scalar = double;
KK_IMPL_MAKE_TYPE_ALIAS(default_scalar, double)
#elif defined(KOKKOSKERNELS_INST_FLOAT)
using default_scalar = float;
KK_IMPL_MAKE_TYPE_ALIAS(default_scalar, float)
#elif defined(KOKKOSKERNELS_INST_HALF)
using default_scalar = Kokkos::Experimental::half_t;
KK_IMPL_MAKE_TYPE_ALIAS(default_scalar, Kokkos::Experimental::half_t)
#elif defined(KOKKOSKERNELS_INST_BHALF)
using default_scalar = Kokkos::Experimental::bhalf_t;
KK_IMPL_MAKE_TYPE_ALIAS(default_scalar, Kokkos::Experimental::bhalf_t)
#else
using default_scalar = double;
KK_IMPL_MAKE_TYPE_ALIAS(default_scalar, double)
#endif

#if defined(KOKKOS_ENABLE_CUDA)
using default_device = Kokkos::Cuda;
KK_IMPL_MAKE_TYPE_ALIAS(default_device, Kokkos::Cuda)
#elif defined(KOKKOS_ENABLE_HIP)
using default_device = Kokkos::HIP;
KK_IMPL_MAKE_TYPE_ALIAS(default_device, Kokkos::HIP)
#elif defined(KOKKOS_ENABLE_OPENMPTARGET)
using default_device = Kokkos::Experimental::OpenMPTarget;
KK_IMPL_MAKE_TYPE_ALIAS(default_device, Kokkos::Experimental::OpenMPTarget)
#elif defined(KOKKOS_ENABLE_OPENMP)
using default_device = Kokkos::OpenMP;
KK_IMPL_MAKE_TYPE_ALIAS(default_device, Kokkos::OpenMP)
#elif defined(KOKKOS_ENABLE_THREADS)
using default_device = Kokkos::Threads;
KK_IMPL_MAKE_TYPE_ALIAS(default_device, Kokkos::Threads)
#else
using default_device = Kokkos::Serial;
KK_IMPL_MAKE_TYPE_ALIAS(default_device, Kokkos::Serial)
#endif

#undef KK_IMPL_MAKE_TYPE_ALIAS

#endif // KOKKOSKERNELS_DEFAULT_TYPES_H
2 changes: 1 addition & 1 deletion common/unit_test/Test_Common_IOUtils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class ViewPrintHelper {

template <typename exec_space>
void testPrintView() {
using scalar_t = default_scalar;
using scalar_t = KokkosKernels::default_scalar;
using Unmanaged = Kokkos::MemoryTraits<Kokkos::Unmanaged>;
using rank0_view = Kokkos::View<scalar_t, Kokkos::HostSpace, Unmanaged>;
using rank1_view = Kokkos::View<scalar_t *, Kokkos::HostSpace, Unmanaged>;
Expand Down
2 changes: 1 addition & 1 deletion example/half/xpy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ int main(int argc, char **argv) {
return 1;
}
using LayoutType = Kokkos::LayoutLeft;
using DeviceType = default_device;
using DeviceType = KokkosKernels::default_device;
size_t n = atoi(argv[1]);
bool time_only = static_cast<bool>(atoi(argv[2]));
do_xpy<float, DeviceType, LayoutType>(n, time_only);
Expand Down
10 changes: 5 additions & 5 deletions example/wiki/graph/KokkosGraph_wiki_9pt_stencil.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@
#include <cmath>
#include <sstream>

using Ordinal = default_lno_t;
using Offset = default_size_type;
using Layout = default_layout;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using Layout = KokkosKernels::default_layout;
using ExecSpace = Kokkos::DefaultExecutionSpace;
using DeviceSpace = typename ExecSpace::memory_space;
using Kokkos::HostSpace;
using RowmapType = Kokkos::View<Offset*, DeviceSpace>;
using ColindsType = Kokkos::View<Ordinal*, DeviceSpace>;
using Handle = KokkosKernels::Experimental::KokkosKernelsHandle<Offset, Ordinal, default_scalar, ExecSpace, DeviceSpace,
DeviceSpace>;
using Handle = KokkosKernels::Experimental::KokkosKernelsHandle<Offset, Ordinal, KokkosKernels::default_scalar,
ExecSpace, DeviceSpace, DeviceSpace>;

namespace GraphDemo {
Ordinal gridX = 15;
Expand Down
8 changes: 4 additions & 4 deletions example/wiki/sparse/KokkosSparse_wiki_bsrmatrix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
#include "KokkosSparse_BsrMatrix.hpp"
#include "KokkosSparse_CrsMatrix.hpp"

using Scalar = default_scalar;
using Ordinal = default_lno_t;
using Offset = default_size_type;
using Layout = default_layout;
using Scalar = KokkosKernels::default_scalar;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using Layout = KokkosKernels::default_layout;

int main() {
Kokkos::initialize();
Expand Down
8 changes: 4 additions & 4 deletions example/wiki/sparse/KokkosSparse_wiki_bsrmatrix_2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
#include "KokkosKernels_default_types.hpp"
#include "KokkosSparse_BsrMatrix.hpp"

using Scalar = default_scalar;
using Ordinal = default_lno_t;
using Offset = default_size_type;
using Layout = default_layout;
using Scalar = KokkosKernels::default_scalar;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using Layout = KokkosKernels::default_layout;

template <class bsrmatrix_type>
struct bsr_fill {
Expand Down
8 changes: 4 additions & 4 deletions example/wiki/sparse/KokkosSparse_wiki_crsmatrix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
#include "KokkosSparse_CrsMatrix.hpp"
#include "KokkosSparse_spmv.hpp"

using Scalar = default_scalar;
using Ordinal = default_lno_t;
using Offset = default_size_type;
using Layout = default_layout;
using Scalar = KokkosKernels::default_scalar;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using Layout = KokkosKernels::default_layout;

int main() {
Kokkos::initialize();
Expand Down
14 changes: 7 additions & 7 deletions example/wiki/sparse/KokkosSparse_wiki_gauss_seidel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,17 @@

// Helper to print out colors in the shape of the grid
int main() {
using Scalar = default_scalar;
using Scalar = KokkosKernels::default_scalar;
using Mag = Kokkos::ArithTraits<Scalar>::mag_type;
using Ordinal = default_lno_t;
using Offset = default_size_type;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using ExecSpace = Kokkos::DefaultExecutionSpace;
using MemSpace = typename ExecSpace::memory_space;
using Device = Kokkos::Device<ExecSpace, MemSpace>;
using Handle =
KokkosKernels::Experimental::KokkosKernelsHandle<Offset, Ordinal, default_scalar, ExecSpace, MemSpace, MemSpace>;
using Matrix = KokkosSparse::CrsMatrix<Scalar, Ordinal, Device, void, Offset>;
using Vector = typename Matrix::values_type;
using Handle = KokkosKernels::Experimental::KokkosKernelsHandle<Offset, Ordinal, KokkosKernels::default_scalar,
ExecSpace, MemSpace, MemSpace>;
using Matrix = KokkosSparse::CrsMatrix<Scalar, Ordinal, Device, void, Offset>;
using Vector = typename Matrix::values_type;
constexpr Ordinal numRows = 10000;
const Scalar one = Kokkos::ArithTraits<Scalar>::one();
const Mag magOne = Kokkos::ArithTraits<Mag>::one();
Expand Down
8 changes: 4 additions & 4 deletions example/wiki/sparse/KokkosSparse_wiki_spadd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@

#include "KokkosKernels_Test_Structured_Matrix.hpp"

using Scalar = default_scalar;
using Ordinal = default_lno_t;
using Offset = default_size_type;
using Layout = default_layout;
using Scalar = KokkosKernels::default_scalar;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using Layout = KokkosKernels::default_layout;

int main() {
Kokkos::initialize();
Expand Down
8 changes: 4 additions & 4 deletions example/wiki/sparse/KokkosSparse_wiki_spgemm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@

#include "KokkosKernels_Test_Structured_Matrix.hpp"

using Scalar = default_scalar;
using Ordinal = default_lno_t;
using Offset = default_size_type;
using Layout = default_layout;
using Scalar = KokkosKernels::default_scalar;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using Layout = KokkosKernels::default_layout;

int main() {
Kokkos::initialize();
Expand Down
8 changes: 4 additions & 4 deletions example/wiki/sparse/KokkosSparse_wiki_spmv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@

#include "KokkosKernels_Test_Structured_Matrix.hpp"

using Scalar = default_scalar;
using Ordinal = default_lno_t;
using Offset = default_size_type;
using Layout = default_layout;
using Scalar = KokkosKernels::default_scalar;
using Ordinal = KokkosKernels::default_lno_t;
using Offset = KokkosKernels::default_size_type;
using Layout = KokkosKernels::default_layout;

template <class Yvector>
struct check_spmv_functor {
Expand Down
16 changes: 8 additions & 8 deletions graph/unit_test/Test_Graph_graph_color.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,30 +169,30 @@ void test_coloring(lno_t numRows, size_type nnz, lno_t bandwidth, lno_t row_size
// device::execution_space::finalize();
}

#define EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \
TEST_F(TestCategory, graph##_##graph_color##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \
test_coloring<SCALAR, ORDINAL, OFFSET, DEVICE>(50000, 50000 * 30, 200, 10); \
test_coloring<SCALAR, ORDINAL, OFFSET, DEVICE>(50000, 50000 * 30, 100, 10); \
#define EXECUTE_TEST(ORDINAL, OFFSET, DEVICE) \
TEST_F(TestCategory, graph##_##graph_color##_default_scalar_##ORDINAL##_##OFFSET##_##DEVICE) { \
test_coloring<KokkosKernels::default_scalar, ORDINAL, OFFSET, DEVICE>(50000, 50000 * 30, 200, 10); \
test_coloring<KokkosKernels::default_scalar, ORDINAL, OFFSET, DEVICE>(50000, 50000 * 30, 100, 10); \
}

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT) && defined(KOKKOSKERNELS_INST_OFFSET_INT)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int, int, TestDevice)
EXECUTE_TEST(int, int, TestDevice)
#endif

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T) && defined(KOKKOSKERNELS_INST_OFFSET_INT)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int64_t, int, TestDevice)
EXECUTE_TEST(int64_t, int, TestDevice)
#endif

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT) && defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int, size_t, TestDevice)
EXECUTE_TEST(int, size_t, TestDevice)
#endif

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T) && defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int64_t, size_t, TestDevice)
EXECUTE_TEST(int64_t, size_t, TestDevice)
#endif

#undef EXECUTE_TEST
16 changes: 8 additions & 8 deletions graph/unit_test/Test_Graph_graph_color_deterministic.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,30 +222,30 @@ void test_coloring_deterministic(lno_t numRows, size_type nnz) {
}
}

#define EXECUTE_TEST(SCALAR, ORDINAL, OFFSET, DEVICE) \
TEST_F(TestCategory, graph##_##graph_color_deterministic##_##SCALAR##_##ORDINAL##_##OFFSET##_##DEVICE) { \
test_coloring_deterministic<SCALAR, ORDINAL, OFFSET, DEVICE>(18, 74); \
test_coloring_deterministic<SCALAR, ORDINAL, OFFSET, DEVICE>(18, 74); \
#define EXECUTE_TEST(ORDINAL, OFFSET, DEVICE) \
TEST_F(TestCategory, graph##_##graph_color_deterministic##_default_scalar_##ORDINAL##_##OFFSET##_##DEVICE) { \
test_coloring_deterministic<KokkosKernels::default_scalar, ORDINAL, OFFSET, DEVICE>(18, 74); \
test_coloring_deterministic<KokkosKernels::default_scalar, ORDINAL, OFFSET, DEVICE>(18, 74); \
}

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT) && defined(KOKKOSKERNELS_INST_OFFSET_INT)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int, int, TestDevice)
EXECUTE_TEST(int, int, TestDevice)
#endif

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T) && defined(KOKKOSKERNELS_INST_OFFSET_INT)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int64_t, int, TestDevice)
EXECUTE_TEST(int64_t, int, TestDevice)
#endif

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT) && defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int, size_t, TestDevice)
EXECUTE_TEST(int, size_t, TestDevice)
#endif

#if (defined(KOKKOSKERNELS_INST_ORDINAL_INT64_T) && defined(KOKKOSKERNELS_INST_OFFSET_SIZE_T)) || \
(!defined(KOKKOSKERNELS_ETI_ONLY) && !defined(KOKKOSKERNELS_IMPL_CHECK_ETI_CALLS))
EXECUTE_TEST(default_scalar, int64_t, size_t, TestDevice)
EXECUTE_TEST(int64_t, size_t, TestDevice)
#endif

#undef EXECUTE_TEST
8 changes: 4 additions & 4 deletions graph/unit_test/Test_Graph_rcm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ void test_rcm(const rowmap_t& rowmap, const entries_t& entries, bool expectBandw

template <typename lno_t, typename size_type, typename device>
void test_rcm_zerorows() {
using graph_t = Kokkos::StaticCrsGraph<lno_t, default_layout, device, void, size_type>;
using graph_t = Kokkos::StaticCrsGraph<lno_t, KokkosKernels::default_layout, device, void, size_type>;
using rowmap_t = typename graph_t::row_map_type::non_const_type;
using entries_t = typename graph_t::entries_type::non_const_type;
rowmap_t rowmap;
Expand All @@ -129,7 +129,7 @@ void test_rcm_zerorows() {

template <typename lno_t, typename size_type, typename device>
void test_rcm_7pt(lno_t gridX, lno_t gridY, lno_t gridZ, bool expectBandwidthReduced) {
using graph_t = Kokkos::StaticCrsGraph<lno_t, default_layout, device, void, size_type>;
using graph_t = Kokkos::StaticCrsGraph<lno_t, KokkosKernels::default_layout, device, void, size_type>;
using rowmap_t = typename graph_t::row_map_type::non_const_type;
using entries_t = typename graph_t::entries_type::non_const_type;
rowmap_t rowmap;
Expand All @@ -140,7 +140,7 @@ void test_rcm_7pt(lno_t gridX, lno_t gridY, lno_t gridZ, bool expectBandwidthRed

template <typename lno_t, typename size_type, typename device>
void test_rcm_4clique() {
using graph_t = Kokkos::StaticCrsGraph<lno_t, default_layout, device, void, size_type>;
using graph_t = Kokkos::StaticCrsGraph<lno_t, KokkosKernels::default_layout, device, void, size_type>;
using rowmap_t = typename graph_t::row_map_type::non_const_type;
using entries_t = typename graph_t::entries_type::non_const_type;
rowmap_t rowmap("rowmap", 5);
Expand All @@ -156,7 +156,7 @@ void test_rcm_4clique() {

template <typename lno_t, typename size_type, typename device>
void test_rcm_multiple_components() {
using graph_t = Kokkos::StaticCrsGraph<lno_t, default_layout, device, void, size_type>;
using graph_t = Kokkos::StaticCrsGraph<lno_t, KokkosKernels::default_layout, device, void, size_type>;
using rowmap_t = typename graph_t::row_map_type::non_const_type;
using entries_t = typename graph_t::entries_type::non_const_type;
// Generate a single 3D grid first
Expand Down
Loading
Loading