Inner Array Layout
Adds the ability to assign a layout to the inner arrays for multidimensional particle data. For example, within a Struct-of-Arrays the velocity array could by as layout left ux,ux,ux,...,uy,uy,uy,...,uz,uz,uz,...
or as layout right ux,uy,uz,ux,uy,uz,...
.
Instead of specifying an inner array size as a template parameter to the Cabana::AoSoA
a user now specifies a Cabana::InnerArrayLayout
. For example, to create an inner array of size 10 with layout left a user would do Cabana::InnerArrayLayout<10,Kokkos::LayoutLeft>
The previous implementation only allowed for layout right (C row-major ordering). It was found that running the performance test with CUDA gave a 2x speedup using layout left vs. layout right per the original results in #4 (closed) bringing the AoSoA speed up to 3x vs using the standard 1-d SoA for GPU implementations. Some sensible defaults have been added to Cabana::PerformanceTraits
but more testing is needed.
This may also have implications for ease of linking with Fortran as a user could force layout left (at potentially the cost of performance) and then each array in the struct-of-arrays would appear as a Fortran array.