diff --git a/.travis.yml b/.travis.yml index 06aea474..444133ad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,12 +17,12 @@ env: - CCACHE_CPP2=yes matrix: - BACKENDS="OPENMP" - - BACKENDS="PTHREAD" - - BACKENDS="SERIAL" - - BACKENDS="OPENMP" ArborX=ON - - BACKENDS="OPENMP" NNP=ON - - BACKENDS="OPENMP" ArborX=ON NNP=ON - - BACKENDS="PTHREAD" ArborX=ON NNP=ON + - BACKENDS="PTHREAD" LAYOUT=1 + - BACKENDS="SERIAL" LAYOUT=2 + - BACKENDS="OPENMP" ArborX=ON LAYOUT=6 + - BACKENDS="OPENMP" NNP=ON LAYOUT=1 LAYOUT_NNP=1 + - BACKENDS="OPENMP" ArborX=ON NNP=ON LAYOUT=2 LAYOUT_NNP=3 + - BACKENDS="PTHREAD" ArborX=ON NNP=ON LAYOUT=6 - BACKENDS="SERIAL" ArborX=ON NNP=ON addons: @@ -39,7 +39,8 @@ addons: before_script: - ccache -z - for i in ${BACKENDS}; do KOKKOS_OPTS+=( -DKokkos_ENABLE_${i}=ON ); done - - for i in ${BACKENDS}; do CABANAMD_OPTS+=( -DCabanaMD_REQUIRE_${i}=ON ); done + - for i in ${LAYOUT}; do CABANAMD_OPTS+=( -DCabanaMD_LAYOUT=${i} ); done + - for i in ${LAYOUT_NNP}; do CABANAMD_OPTS+=( -DCabanaMD_LAYOUT_NNP=${i} ); done # LD_LIBRARY_PATH workaround for libomp: https://github.com/travis-ci/travis-ci/issues/8613 - if [[ ${CC} = clang ]]; then export LD_LIBRARY_PATH=/usr/local/clang/lib:$LD_LIBRARY_PATH; fi - if [[ ${CC} = gcc ]]; then export CXX=g++-6; export CC=gcc-6; export FC=gfortran-6; fi diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d59f15b4..90351166 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,29 +1,56 @@ #------------------------------------------------------------ # Set up vector length options #------------------------------------------------------------ -if(NOT CabanaMD_VECTORLENGTH) - if(Kokkos_ENABLE_CUDA) - set(CabanaMD_VECTORLENGTH 32) +macro(CabanaMD_layout) + cmake_parse_arguments(LAYOUT "" "TYPE;PRINT" "ALLOWED" ${ARGN}) + set(CabanaMD_${LAYOUT_TYPE} 1 CACHE STRING "Number of AoSoA for${LAYOUT_PRINT} atom properties") + set(_match 0) + foreach(_l ${LAYOUT_ALLOWED}) + if(CabanaMD_${LAYOUT_TYPE} EQUAL _l) + set(_match 1) + message(STATUS "Number of AoSoA${LAYOUT_PRINT}: ${CabanaMD_${LAYOUT_TYPE}}") + endif() + endforeach() + if(NOT _match) + message(FATAL_ERROR "Layout${LAYOUT_PRINT} must be one of ${LAYOUT_ALLOWED}") + endif() +endmacro() + +macro(CabanaMD_vector_length) + cmake_parse_arguments(VL "" "TYPE;LAYOUT;PRINT" "" ${ARGN}) + + set(CabanaMD_${VL_TYPE} 1 CACHE STRING "Vector length for all${VL_PRINT} atom AoSoA(s) or semi-colon separated list of vector lengths") + set(CabanaMD_${VL_TYPE}_0 1) + + list(LENGTH CabanaMD_${VL_TYPE} _nv_list) + if(_nv_list EQUAL 1) + math(EXPR _nv_loop "${VL_LAYOUT}-1") + foreach(_v RANGE 0 ${_nv_loop}) + set(CabanaMD_${VL_TYPE}_${_v} ${CabanaMD_${VL_TYPE}}) + endforeach() + elseif(_nv_list EQUAL ${VL_LAYOUT}) + set(_count 0) + foreach(_v ${CabanaMD_${VL_TYPE}}) + set(CabanaMD_${VL_TYPE}_${_count} ${_v}) + math(EXPR _count "${_count}+1") + endforeach() else() - set(CabanaMD_VECTORLENGTH 1) + message(FATAL_ERROR "Vector length${VL_PRINT} list must be length 1 or match CabanaMD_LAYOUT length") endif() -endif() -message( STATUS "Using vector length: ${CabanaMD_VECTORLENGTH}" ) + message(STATUS "Using vector length(s)${VL_PRINT}: ${CabanaMD_${VL_TYPE}}") +endmacro() + +CabanaMD_layout(TYPE LAYOUT ALLOWED "1;2;6") +CabanaMD_vector_length(TYPE VECTORLENGTH LAYOUT ${CabanaMD_LAYOUT}) if(CabanaMD_ENABLE_NNP) - if(NOT CabanaMD_VECTORLENGTH_NNP) - if(Kokkos_ENABLE_CUDA) - set(CabanaMD_VECTORLENGTH_NNP 32) - else() - set(CabanaMD_VECTORLENGTH_NNP 1) - endif() - endif() - message( STATUS "Using vector length: ${CabanaMD_VECTORLENGTH_NNP} (NNP)" ) + CabanaMD_layout(TYPE LAYOUT_NNP PRINT " NNP" ALLOWED "1;3") + CabanaMD_vector_length(TYPE VECTORLENGTH_NNP PRINT " NNP" LAYOUT ${CabanaMD_LAYOUT_NNP}) if(NOT CabanaMD_MAXSYMMFUNC_NNP) set(CabanaMD_MAXSYMMFUNC_NNP 30) endif() - message( STATUS "Maximum symmetry functions: ${CabanaMD_MAXSYMMFUNC_NNP} (NNP)" ) + message(STATUS "Maximum symmetry functions NNP: ${CabanaMD_MAXSYMMFUNC_NNP}") endif() #------------------------------------------------------------ diff --git a/src/CabanaMD_config.hpp.cmakein b/src/CabanaMD_config.hpp.cmakein index 20cde8a3..f14e285e 100644 --- a/src/CabanaMD_config.hpp.cmakein +++ b/src/CabanaMD_config.hpp.cmakein @@ -6,14 +6,20 @@ #cmakedefine CabanaMD_ENABLE_NNP -#cmakedefine CabanaMD_LAYOUT_1AoSoA -#cmakedefine CabanaMD_LAYOUT_2AoSoA -#cmakedefine CabanaMD_LAYOUT_6AoSoA -#cmakedefine CabanaMD_VECTORLENGTH @CabanaMD_VECTORLENGTH@ +#cmakedefine CabanaMD_LAYOUT @CabanaMD_LAYOUT@ +#cmakedefine CabanaMD_VECTORLENGTH "@CabanaMD_VECTORLENGTH@" +#cmakedefine CabanaMD_VECTORLENGTH_0 @CabanaMD_VECTORLENGTH_0@ +#cmakedefine CabanaMD_VECTORLENGTH_1 @CabanaMD_VECTORLENGTH_1@ +#cmakedefine CabanaMD_VECTORLENGTH_2 @CabanaMD_VECTORLENGTH_2@ +#cmakedefine CabanaMD_VECTORLENGTH_3 @CabanaMD_VECTORLENGTH_3@ +#cmakedefine CabanaMD_VECTORLENGTH_4 @CabanaMD_VECTORLENGTH_4@ +#cmakedefine CabanaMD_VECTORLENGTH_5 @CabanaMD_VECTORLENGTH_5@ -#cmakedefine CabanaMD_LAYOUT_NNP_1AoSoA -#cmakedefine CabanaMD_LAYOUT_NNP_3AoSoA -#cmakedefine CabanaMD_VECTORLENGTH_NNP @CabanaMD_VECTORLENGTH_NNP@ +#cmakedefine CabanaMD_LAYOUT_NNP @CabanaMD_LAYOUT_NNP@ +#cmakedefine CabanaMD_VECTORLENGTH_NNP "@CabanaMD_VECTORLENGTH_NNP@" +#cmakedefine CabanaMD_VECTORLENGTH_NNP_0 @CabanaMD_VECTORLENGTH_NNP_0@ +#cmakedefine CabanaMD_VECTORLENGTH_NNP_1 @CabanaMD_VECTORLENGTH_NNP_1@ +#cmakedefine CabanaMD_VECTORLENGTH_NNP_2 @CabanaMD_VECTORLENGTH_NNP_2@ #cmakedefine CabanaMD_MAXSYMMFUNC_NNP @CabanaMD_MAXSYMMFUNC_NNP@ #endif diff --git a/src/cabanamd_impl.h b/src/cabanamd_impl.h index 9cce4ef8..9558c289 100644 --- a/src/cabanamd_impl.h +++ b/src/cabanamd_impl.h @@ -132,36 +132,39 @@ void CbnMD::init( InputCL commandline ) else { using t_device = typename t_System::device_type; - if ( input->nnp_layout_type == AOSOA_1 ) - { - if ( serial_neigh ) - force = new ForceNNP, - t_Neighbor, Cabana::SerialOpTag, - Cabana::SerialOpTag>( system ); - if ( team_neigh ) - force = new ForceNNP, - t_Neighbor, Cabana::TeamOpTag, - Cabana::TeamOpTag>( system ); - if ( vector_angle ) - force = new ForceNNP, - t_Neighbor, Cabana::TeamOpTag, - Cabana::TeamVectorOpTag>( system ); - } - if ( input->nnp_layout_type == AOSOA_3 ) - { - if ( serial_neigh ) - force = new ForceNNP, - t_Neighbor, Cabana::SerialOpTag, - Cabana::SerialOpTag>( system ); - if ( team_neigh ) - force = new ForceNNP, - t_Neighbor, Cabana::TeamOpTag, - Cabana::TeamOpTag>( system ); - if ( vector_angle ) - force = new ForceNNP, - t_Neighbor, Cabana::TeamOpTag, - Cabana::TeamVectorOpTag>( system ); - } +#if ( CabanaMD_LAYOUT_NNP == 1 ) + if ( serial_neigh ) + force = + new ForceNNP, t_Neighbor, + Cabana::SerialOpTag, Cabana::SerialOpTag>( + system ); + if ( team_neigh ) + force = + new ForceNNP, t_Neighbor, + Cabana::TeamOpTag, Cabana::TeamOpTag>( + system ); + if ( vector_angle ) + force = + new ForceNNP, t_Neighbor, + Cabana::TeamOpTag, Cabana::TeamVectorOpTag>( + system ); +#elif ( CabanaMD_LAYOUT_NNP == 3 ) + if ( serial_neigh ) + force = + new ForceNNP, t_Neighbor, + Cabana::SerialOpTag, Cabana::SerialOpTag>( + system ); + if ( team_neigh ) + force = + new ForceNNP, t_Neighbor, + Cabana::TeamOpTag, Cabana::TeamOpTag>( + system ); + if ( vector_angle ) + force = + new ForceNNP, t_Neighbor, + Cabana::TeamOpTag, Cabana::TeamVectorOpTag>( + system ); +#endif } } #endif diff --git a/src/force_types/modules_system_nnp.h b/src/force_types/modules_system_nnp.h index 8ed4fd12..f177ece0 100644 --- a/src/force_types/modules_system_nnp.h +++ b/src/force_types/modules_system_nnp.h @@ -9,5 +9,8 @@ * SPDX-License-Identifier: BSD-3-Clause * ****************************************************************************/ +#if ( CabanaMD_LAYOUT_NNP == 1 ) #include +#elif ( CabanaMD_LAYOUT_NNP == 3 ) #include +#endif diff --git a/src/inputCL.cpp b/src/inputCL.cpp index 10ea4d49..918d6801 100644 --- a/src/inputCL.cpp +++ b/src/inputCL.cpp @@ -57,8 +57,6 @@ InputCL::InputCL() { device_type = DEFAULT; - layout_type = AOSOA_6; - nnp_layout_type = AOSOA_3; neighbor_type = NEIGH_VERLET_2D; force_iteration_type = FORCE_ITER_NEIGH_FULL; set_force_iteration = false; @@ -90,14 +88,6 @@ void InputCL::read_args( int argc, char *argv[] ) " --device-type [TYPE]: Kokkos device type to run ", "with\n", " (SERIAL, OPENMP, CUDA, HIP)" ); - log( std::cout, - " --layout-type [TYPE]: Number of AoSoA for particle ", - "properties\n", - " (1AOSOA, 2AOSOA, 6AOSOA)" ); - log( std::cout, - " --nnp-layout-type [TYPE]: Number of AoSoA for neural ", - "network potential particle properties\n", - " (1AOSOA, 3AOSOA)" ); log( std::cout, " --force-iteration [TYPE]: Specify iteration style for ", "force calculations\n", @@ -168,32 +158,6 @@ void InputCL::read_args( int argc, char *argv[] ) ++i; } - // AoSoA layout type - else if ( ( strcmp( argv[i], "--layout-type" ) == 0 ) ) - { - if ( ( strcmp( argv[i + 1], "1AOSOA" ) == 0 ) ) - layout_type = AOSOA_1; - else if ( ( strcmp( argv[i + 1], "2AOSOA" ) == 0 ) ) - layout_type = AOSOA_2; - else if ( ( strcmp( argv[i + 1], "6AOSOA" ) == 0 ) ) - layout_type = AOSOA_6; - else - log_err( std::cout, "Unknown commandline option: ", argv[i], - " ", argv[i + 1] ); - ++i; - } - else if ( ( strcmp( argv[i], "--nnp-layout-type" ) == 0 ) ) - { - if ( ( strcmp( argv[i + 1], "1AOSOA" ) == 0 ) ) - nnp_layout_type = AOSOA_1; - else if ( ( strcmp( argv[i + 1], "3AOSOA" ) == 0 ) ) - nnp_layout_type = AOSOA_3; - else - log_err( std::cout, "Unknown commandline option: ", argv[i], - " ", argv[i + 1] ); - ++i; - } - // Force Iteration Type Related else if ( ( strcmp( argv[i], "--force-iteration" ) == 0 ) ) { diff --git a/src/inputFile_impl.h b/src/inputFile_impl.h index 16ed139f..c2e48752 100644 --- a/src/inputFile_impl.h +++ b/src/inputFile_impl.h @@ -77,8 +77,6 @@ InputFile::InputFile( InputCL commandline_, t_System *system_ ) force_type = FORCE_LJ; binning_type = BINNING_LINKEDCELL; - layout_type = commandline.layout_type; - nnp_layout_type = commandline.nnp_layout_type; neighbor_type = commandline.neighbor_type; force_iteration_type = commandline.force_iteration_type; force_neigh_parallel_type = commandline.force_neigh_parallel_type; @@ -487,9 +485,8 @@ void InputFile::create_lattice( Comm *comm ) std::ofstream out( output_file, std::ofstream::app ); t_System s = *system; - using t_layout = typename t_System::layout_type; System, - t_layout> + CabanaMD_LAYOUT> host_system; using h_t_mass = typename t_System::h_t_mass; diff --git a/src/mdfactory.h b/src/mdfactory.h index 435d38ae..0fa41eae 100644 --- a/src/mdfactory.h +++ b/src/mdfactory.h @@ -76,20 +76,13 @@ class MDfactory template static CabanaMD *createImpl( InputCL commandline ) { - int layout = commandline.layout_type; int neigh = commandline.neighbor_type; bool half_neigh = commandline.force_iteration_type == FORCE_ITER_NEIGH_HALF; - if ( layout == AOSOA_1 ) - return createImplSystem>( neigh, - half_neigh ); - else if ( layout == AOSOA_2 ) - return createImplSystem>( neigh, - half_neigh ); - else if ( layout == AOSOA_6 ) - return createImplSystem>( neigh, - half_neigh ); + return createImplSystem>( + neigh, half_neigh ); + return nullptr; } diff --git a/src/modules_system.h b/src/modules_system.h index a2ff7a92..74bf5f61 100644 --- a/src/modules_system.h +++ b/src/modules_system.h @@ -9,6 +9,10 @@ * SPDX-License-Identifier: BSD-3-Clause * ****************************************************************************/ +#if ( CabanaMD_LAYOUT == 1 ) #include +#elif ( CabanaMD_LAYOUT == 2 ) #include +#elif ( CabanaMD_LAYOUT == 6 ) #include +#endif diff --git a/src/read_data.h b/src/read_data.h index 5afae73f..84e22aa6 100644 --- a/src/read_data.h +++ b/src/read_data.h @@ -320,9 +320,8 @@ void read_lammps_data_file( InputFile *input, t_System *s, read_lammps_header( file, err, s ); // Use a host mirror for reading from data file - using t_layout = typename t_System::layout_type; System, - t_layout> + CabanaMD_LAYOUT> host_system; // Assume near load balance and resize as necessary host_system.resize( s->N / comm->num_processes() ); @@ -384,9 +383,8 @@ void write_data( t_System *s, std::string data_file ) { std::ofstream data( data_file ); - using t_layout = typename t_System::layout_type; System, - t_layout> + CabanaMD_LAYOUT> host_s; s->slice_x(); auto x = s->x; diff --git a/src/system.h b/src/system.h index 356afa19..4564bb19 100644 --- a/src/system.h +++ b/src/system.h @@ -215,7 +215,7 @@ class SystemCommon virtual const char *name() { return "SystemNone"; } }; -template +template class System : public SystemCommon { public: diff --git a/src/system_types/system_1aosoa.h b/src/system_types/system_1aosoa.h index ed4ace3d..f4e21f67 100644 --- a/src/system_types/system_1aosoa.h +++ b/src/system_types/system_1aosoa.h @@ -17,12 +17,12 @@ #include template -class System : public SystemCommon +class System : public SystemCommon { using t_tuple = Cabana::MemberTypes; using AoSoA_1 = - typename Cabana::AoSoA; + typename Cabana::AoSoA; AoSoA_1 aosoa_0; using SystemCommon::N_max; @@ -30,23 +30,19 @@ class System : public SystemCommon public: using SystemCommon::SystemCommon; - using layout_type = AoSoA1; - // Per Particle Property - using t_x = typename System::AoSoA_1::template member_slice_type<0>; - using t_v = typename System::AoSoA_1::template member_slice_type<1>; - using t_f = typename System::AoSoA_1::template member_slice_type<2>; + using t_x = + typename System::AoSoA_1::template member_slice_type<0>; + using t_v = + typename System::AoSoA_1::template member_slice_type<1>; + using t_f = + typename System::AoSoA_1::template member_slice_type<2>; using t_type = - typename System::AoSoA_1::template member_slice_type<3>; + typename System::AoSoA_1::template member_slice_type<3>; using t_id = - typename System::AoSoA_1::template member_slice_type<4>; - using t_q = typename System::AoSoA_1::template member_slice_type<5>; + typename System::AoSoA_1::template member_slice_type<4>; + using t_q = + typename System::AoSoA_1::template member_slice_type<5>; t_x x; t_v v; t_f f; diff --git a/src/system_types/system_2aosoa.h b/src/system_types/system_2aosoa.h index 065fbd15..8133562d 100644 --- a/src/system_types/system_2aosoa.h +++ b/src/system_types/system_2aosoa.h @@ -17,14 +17,14 @@ #include template -class System : public SystemCommon +class System : public SystemCommon { using t_tuple_0 = Cabana::MemberTypes; using t_tuple_1 = Cabana::MemberTypes; using AoSoA_2_0 = - typename Cabana::AoSoA; + typename Cabana::AoSoA; using AoSoA_2_1 = - typename Cabana::AoSoA; + typename Cabana::AoSoA; AoSoA_2_0 aosoa_0; AoSoA_2_1 aosoa_1; @@ -34,29 +34,22 @@ class System : public SystemCommon public: using SystemCommon::SystemCommon; - using layout_type = AoSoA2; using memory_space = typename t_device::memory_space; using execution_space = typename t_device::execution_space; // Per Particle Property using t_x = - typename System::AoSoA_2_0::template member_slice_type<0>; + typename System::AoSoA_2_0::template member_slice_type<0>; using t_v = - typename System::AoSoA_2_1::template member_slice_type<0>; + typename System::AoSoA_2_1::template member_slice_type<0>; using t_f = - typename System::AoSoA_2_0::template member_slice_type<1>; + typename System::AoSoA_2_0::template member_slice_type<1>; using t_type = - typename System::AoSoA_2_0::template member_slice_type<2>; + typename System::AoSoA_2_0::template member_slice_type<2>; using t_id = - typename System::AoSoA_2_1::template member_slice_type<1>; + typename System::AoSoA_2_1::template member_slice_type<1>; using t_q = - typename System::AoSoA_2_1::template member_slice_type<2>; + typename System::AoSoA_2_1::template member_slice_type<2>; t_x x; t_v v; t_f f; diff --git a/src/system_types/system_6aosoa.h b/src/system_types/system_6aosoa.h index bab602b6..15fd6505 100644 --- a/src/system_types/system_6aosoa.h +++ b/src/system_types/system_6aosoa.h @@ -17,23 +17,29 @@ #include template -class System : public SystemCommon +class System : public SystemCommon { using t_tuple_x = Cabana::MemberTypes; using t_tuple_int = Cabana::MemberTypes; using t_tuple_fl = Cabana::MemberTypes; using AoSoA_x = - typename Cabana::AoSoA; - using AoSoA_int = - typename Cabana::AoSoA; - using AoSoA_fl = - typename Cabana::AoSoA; + typename Cabana::AoSoA; + using AoSoA_v = + typename Cabana::AoSoA; + using AoSoA_f = + typename Cabana::AoSoA; + using AoSoA_id = + typename Cabana::AoSoA; + using AoSoA_type = + typename Cabana::AoSoA; + using AoSoA_q = + typename Cabana::AoSoA; AoSoA_x aosoa_x; - AoSoA_x aosoa_v; - AoSoA_x aosoa_f; - AoSoA_int aosoa_id; - AoSoA_int aosoa_type; - AoSoA_fl aosoa_q; + AoSoA_v aosoa_v; + AoSoA_f aosoa_f; + AoSoA_id aosoa_id; + AoSoA_type aosoa_type; + AoSoA_q aosoa_q; using SystemCommon::N_max; // using SystemCommon::mass; @@ -41,26 +47,22 @@ class System : public SystemCommon public: using SystemCommon::SystemCommon; - using layout_type = AoSoA6; using memory_space = typename t_device::memory_space; using execution_space = typename t_device::execution_space; // Per Particle Property - using t_x = typename System::AoSoA_x::template member_slice_type<0>; - using t_v = typename System::AoSoA_x::template member_slice_type<0>; - using t_f = typename System::AoSoA_x::template member_slice_type<0>; + using t_x = + typename System::AoSoA_x::template member_slice_type<0>; + using t_v = + typename System::AoSoA_v::template member_slice_type<0>; + using t_f = + typename System::AoSoA_f::template member_slice_type<0>; using t_type = - typename System::AoSoA_int::template member_slice_type<0>; + typename System::AoSoA_type::template member_slice_type<0>; using t_id = - typename System::AoSoA_int::template member_slice_type<0>; + typename System::AoSoA_id::template member_slice_type<0>; using t_q = - typename System::AoSoA_fl::template member_slice_type<0>; + typename System::AoSoA_q::template member_slice_type<0>; t_x x; t_v v; @@ -72,11 +74,11 @@ class System : public SystemCommon void init() override { AoSoA_x aosoa_x( "X", N_max ); - AoSoA_x aosoa_v( "V", N_max ); - AoSoA_x aosoa_f( "F", N_max ); - AoSoA_int aosoa_id( "ID", N_max ); - AoSoA_int aosoa_type( "Type", N_max ); - AoSoA_fl aosoa_q( "Q", N_max ); + AoSoA_v aosoa_v( "V", N_max ); + AoSoA_f aosoa_f( "F", N_max ); + AoSoA_id aosoa_id( "ID", N_max ); + AoSoA_type aosoa_type( "Type", N_max ); + AoSoA_q aosoa_q( "Q", N_max ); } void resize( T_INT N_new ) override @@ -146,11 +148,11 @@ class System : public SystemCommon const char *name() override { return "System:6AoSoA"; } AoSoA_x get_aosoa_x() { return aosoa_x; } - AoSoA_x get_aosoa_v() { return aosoa_v; } - AoSoA_x get_aosoa_f() { return aosoa_f; } - AoSoA_int get_aosoa_type() { return aosoa_type; } - AoSoA_int get_aosoa_id() { return aosoa_id; } - AoSoA_fl get_aosoa_q() { return aosoa_q; } + AoSoA_v get_aosoa_v() { return aosoa_v; } + AoSoA_f get_aosoa_f() { return aosoa_f; } + AoSoA_type get_aosoa_type() { return aosoa_type; } + AoSoA_id get_aosoa_id() { return aosoa_id; } + AoSoA_q get_aosoa_q() { return aosoa_q; } }; #endif diff --git a/src/system_types/system_nnp.h b/src/system_types/system_nnp.h index 4b9c4791..94e61e68 100644 --- a/src/system_types/system_nnp.h +++ b/src/system_types/system_nnp.h @@ -16,7 +16,7 @@ #include -template +template class System_NNP { }; diff --git a/src/system_types/system_nnp_1aosoa.h b/src/system_types/system_nnp_1aosoa.h index 3602c16a..a1c17b85 100644 --- a/src/system_types/system_nnp_1aosoa.h +++ b/src/system_types/system_nnp_1aosoa.h @@ -17,31 +17,31 @@ #include template -class System_NNP +class System_NNP { using t_tuple_NNP = Cabana::MemberTypes; using AoSoA_NNP_1 = typename Cabana::AoSoA; + CabanaMD_VECTORLENGTH_NNP_0>; AoSoA_NNP_1 aosoa_0; public: using t_G = typename System_NNP::AoSoA_NNP_1::template member_slice_type<0>; + 1>::AoSoA_NNP_1::template member_slice_type<0>; using t_dEdG = typename System_NNP::AoSoA_NNP_1::template member_slice_type<1>; + 1>::AoSoA_NNP_1::template member_slice_type<1>; using t_E = typename System_NNP::AoSoA_NNP_1::template member_slice_type<2>; + 1>::AoSoA_NNP_1::template member_slice_type<2>; t_G G; t_dEdG dEdG; t_E E; - System_NNP() { AoSoA_NNP_1 aosoa_0( "All", 0 ); } - ~System_NNP() {} + System_NNP() { AoSoA_NNP_1 aosoa_0( "All", 0 ); } + ~System_NNP() {} void resize( T_INT N_new ) { aosoa_0.resize( N_new ); } diff --git a/src/system_types/system_nnp_3aosoa.h b/src/system_types/system_nnp_3aosoa.h index 54615996..d7127284 100644 --- a/src/system_types/system_nnp_3aosoa.h +++ b/src/system_types/system_nnp_3aosoa.h @@ -17,37 +17,42 @@ #include template -class System_NNP +class System_NNP { using t_tuple_NNP_SF = Cabana::MemberTypes; using t_tuple_NNP_fl = Cabana::MemberTypes; - using AoSoA_NNP_SF = typename Cabana::AoSoA; - using AoSoA_NNP_fl = typename Cabana::AoSoA; - AoSoA_NNP_SF aosoa_G; - AoSoA_NNP_SF aosoa_dEdG; - AoSoA_NNP_fl aosoa_E; + using AoSoA_NNP_G = typename Cabana::AoSoA; + using AoSoA_NNP_dEdG = typename Cabana::AoSoA; + using AoSoA_NNP_E = typename Cabana::AoSoA; + AoSoA_NNP_G aosoa_G; + AoSoA_NNP_dEdG aosoa_dEdG; + AoSoA_NNP_E aosoa_E; public: - using t_G = typename System_NNP< - t_device, AoSoA3>::AoSoA_NNP_SF::template member_slice_type<0>; - using t_dEdG = typename System_NNP< - t_device, AoSoA3>::AoSoA_NNP_SF::template member_slice_type<0>; - using t_E = typename System_NNP< - t_device, AoSoA3>::AoSoA_NNP_fl::template member_slice_type<0>; + using t_G = + typename System_NNP::AoSoA_NNP_G::template member_slice_type<0>; + using t_dEdG = + typename System_NNP::AoSoA_NNP_dEdG::template member_slice_type<0>; + using t_E = + typename System_NNP::AoSoA_NNP_E::template member_slice_type<0>; t_G G; t_dEdG dEdG; t_E E; - System_NNP() + System_NNP() { - AoSoA_NNP_SF aosoa_G( "G", 0 ); - AoSoA_NNP_SF aosoa_dEdG( "dEdG", 0 ); - AoSoA_NNP_fl aosoa_E( "E", 0 ); + AoSoA_NNP_G aosoa_G( "G", 0 ); + AoSoA_NNP_dEdG aosoa_dEdG( "dEdG", 0 ); + AoSoA_NNP_E aosoa_E( "E", 0 ); } - ~System_NNP() {} + ~System_NNP() {} void resize( T_INT N_new ) { diff --git a/src/types.h b/src/types.h index 926577da..560802da 100644 --- a/src/types.h +++ b/src/types.h @@ -68,27 +68,6 @@ enum DEFAULT }; -// AoSoA layout type -enum -{ - AOSOA_1, - AOSOA_2, - AOSOA_3, - AOSOA_6 -}; -struct AoSoA1 -{ -}; -struct AoSoA2 -{ -}; -struct AoSoA3 -{ -}; -struct AoSoA6 -{ -}; - // Lattice Type enum { diff --git a/unit_test/tstIntegrator.hpp b/unit_test/tstIntegrator.hpp index 2924ed39..14b42449 100644 --- a/unit_test/tstIntegrator.hpp +++ b/unit_test/tstIntegrator.hpp @@ -9,6 +9,8 @@ * SPDX-License-Identifier: BSD-3-Clause * ****************************************************************************/ +#include + #include #include @@ -139,7 +141,15 @@ void testIntegratorReversibility( int steps ) TEST( TEST_CATEGORY, reversibility_test ) { using DeviceType = Kokkos::Device; - testIntegratorReversibility>( 100 ); +#if ( CabanaMD_LAYOUT == 1 ) + using t_System = System; +#elif ( CabanaMD_LAYOUT == 2 ) + using t_System = System; +#elif ( CabanaMD_LAYOUT == 6 ) + using t_System = System; +#endif + + testIntegratorReversibility( 100 ); } //---------------------------------------------------------------------------// diff --git a/unit_test/tstNeighbor.hpp b/unit_test/tstNeighbor.hpp index e1e6c409..3048d46c 100644 --- a/unit_test/tstNeighbor.hpp +++ b/unit_test/tstNeighbor.hpp @@ -9,6 +9,8 @@ * SPDX-License-Identifier: BSD-3-Clause * ****************************************************************************/ +#include + #include #include @@ -320,7 +322,13 @@ void testNeighborListPartialRange( bool half_neigh ) TEST( TEST_CATEGORY, verlet_full_test ) { using DeviceType = Kokkos::Device; - using t_System = System; +#if ( CabanaMD_LAYOUT == 1 ) + using t_System = System; +#elif ( CabanaMD_LAYOUT == 2 ) + using t_System = System; +#elif ( CabanaMD_LAYOUT == 6 ) + using t_System = System; +#endif { using t_Neigh = NeighborVerlet; @@ -344,7 +352,13 @@ TEST( TEST_CATEGORY, verlet_full_test ) TEST( TEST_CATEGORY, verlet_half_test ) { using DeviceType = Kokkos::Device; - using t_System = System; +#if ( CabanaMD_LAYOUT == 1 ) + using t_System = System; +#elif ( CabanaMD_LAYOUT == 2 ) + using t_System = System; +#elif ( CabanaMD_LAYOUT == 6 ) + using t_System = System; +#endif { using t_Neigh = NeighborVerlet;