diff --git a/ci_tools/gyselalib_static_analysis.py b/ci_tools/gyselalib_static_analysis.py index 1b3a95387..5a1018664 100644 --- a/ci_tools/gyselalib_static_analysis.py +++ b/ci_tools/gyselalib_static_analysis.py @@ -412,26 +412,28 @@ def check_directives(file): if file.data_xml is None: if file.file.suffix != '.hpp': return + raw_strs = [r['str'] for r in file.raw] try: - pragma_idx = file.raw.index('pragma') + pragma_idx = raw_strs.index('pragma') except ValueError: pragma_idx = None - if pragma_idx is None or file.raw[pragma_idx-1] != '#' or file.raw[pragma_idx+1] != 'once': + if pragma_idx is None or raw_strs[pragma_idx-1] != '#' or raw_strs[pragma_idx+1] != 'once': report_error(FATAL, file, 2, "#pragma once missing from the top of a hpp file") - if file.file.suffix == '.hpp' and not file.root.findall("./dump/directivelist/directive[@str='#pragma once']"): - report_error(FATAL, file, 2, "#pragma once missing from the top of a hpp file") + else: + if file.file.suffix == '.hpp' and not file.root.findall("./dump/directivelist/directive[@str='#pragma once']"): + report_error(FATAL, file, 2, "#pragma once missing from the top of a hpp file") - directives = {d.attrib['linenr']: d.attrib['str'].split() for d in file.root.findall("./dump/directivelist/directive") - if Path(d.attrib['file']) == file.file} - include_directives = {linenr: words[1] for linenr, words in directives.items() if len(words)>1 and words[0] == '#include'} - for linenr, include_str in include_directives.items(): - include_file = include_str[1:-1] - possible_matches = [match for f in global_folders for match in f.glob(f'**/{include_file}')] - if possible_matches and include_str[0] != '"': - report_error(STYLE, file, linenr, f'Quotes should be used to include files from the gyselalibxx project ({include_str}->"{include_file}")') - elif not possible_matches and include_str == '"': - report_error(STYLE, file, linenr, f'Angle brackets should be used to include files from external libraries ({include_str}-><{include_file}>)') + directives = {d.attrib['linenr']: d.attrib['str'].split() for d in file.root.findall("./dump/directivelist/directive") + if Path(d.attrib['file']) == file.file} + include_directives = {linenr: words[1] for linenr, words in directives.items() if len(words)>1 and words[0] == '#include'} + for linenr, include_str in include_directives.items(): + include_file = include_str[1:-1] + possible_matches = [match for f in global_folders for match in f.glob(f'**/{include_file}')] + if possible_matches and include_str[0] != '"': + report_error(STYLE, file, linenr, f'Quotes should be used to include files from the gyselalibxx project ({include_str}->"{include_file}")') + elif not possible_matches and include_str == '"': + report_error(STYLE, file, linenr, f'Angle brackets should be used to include files from external libraries ({include_str}-><{include_file}>)') def update_aliases(all_files): """ @@ -703,16 +705,23 @@ def check_exec_space_usage(file): for s_id, scope in scopes.items(): if scope['exec_space'] == 'DefaultHostExecutionSpace': continue - relevant_code = config.findall(f".//token[@scope='{s_id}']") + relevant_code = [c for c in config.findall(f".//token[@scope='{s_id}']") if c.attrib['file'] == str(file.file)] code_keys = [c.attrib['str'] for c in relevant_code] exception_keys = ('is_same','is_same_v', 'tie', 'tuple_size', 'tuple_element', 'make_tuple', 'get', 'array', 'tuple', 'conditional', 'conditional_t', 'enable_if', 'enable_if_t', 'is_base_of', 'is_base_of_v', 'integer_sequence', 'pair', 'declval', 'tuple_cat', 'integral_constant', 'size_t', 'move', - 'optional') + 'make_integer_sequence', 'make_index_sequence', 'index_sequence', + 'experimental::full_extent', 'experimental::submdspan') if 'std' in code_keys: idx = code_keys.index('std') - if code_keys[idx+1] == '::' and code_keys[idx+2] not in exception_keys: - func = ' '.join(code_keys[idx:idx+3]) + func = None + if code_keys[idx+1] == '::': + func = code_keys[idx+2] + idx += 2 + while code_keys[idx+1] == '::': + func += '::' + code_keys[idx+2] + idx += 2 + if func and func not in exception_keys: msg = f"Std functions are not designed to run on GPU. You may wish to check if there is an equivalent Kokkos:: function? ({func})" report_error(FATAL, file, relevant_code[idx].attrib['linenr'], msg) @@ -740,9 +749,11 @@ def check_exec_space_usage(file): error_level = max(error_level, possible_error_levels[STYLE]) for geom, files in relevant_files.items(): + print(geom, files) if no_file_filter or any(f in filter_files for f in files): print("------------- Checking ", geom, " -------------") - p = subprocess.run(cppcheck_command + list(files) + [f'--file-filter={f}' for f in filter_files+['*geometry.hpp', str(spec_info)]], check=False) + geom_file_filter = [] if no_file_filter else filter_files+['*geometry.hpp', str(spec_info)] + p = subprocess.run(cppcheck_command + list(files) + [f'--file-filter={f}' for f in geom_file_filter], check=False) if p.returncode: error_level = max(error_level, possible_error_levels[STYLE]) diff --git a/simulations/geometry5D/testcollisions/pdi_out.yml.hpp b/simulations/geometry5D/testcollisions/pdi_out.yml.hpp index 3560c60fe..2f4f37a99 100644 --- a/simulations/geometry5D/testcollisions/pdi_out.yml.hpp +++ b/simulations/geometry5D/testcollisions/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/simulations/geometryRTheta/diocotron/pdi_out.yml.hpp b/simulations/geometryRTheta/diocotron/pdi_out.yml.hpp index 96da0d878..73f8dab25 100644 --- a/simulations/geometryRTheta/diocotron/pdi_out.yml.hpp +++ b/simulations/geometryRTheta/diocotron/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/simulations/geometryRTheta/vortex_merger/pdi_out.yml.hpp b/simulations/geometryRTheta/vortex_merger/pdi_out.yml.hpp index a1b9250dc..4f4b7fb1e 100644 --- a/simulations/geometryRTheta/vortex_merger/pdi_out.yml.hpp +++ b/simulations/geometryRTheta/vortex_merger/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/simulations/geometryVparMu/collisions/pdi_out.yml.hpp b/simulations/geometryVparMu/collisions/pdi_out.yml.hpp index 06cfc8beb..5f8f8793b 100644 --- a/simulations/geometryVparMu/collisions/pdi_out.yml.hpp +++ b/simulations/geometryVparMu/collisions/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/simulations/geometryXVx/bump_on_tail/pdi_out.yml.hpp b/simulations/geometryXVx/bump_on_tail/pdi_out.yml.hpp index 2ef49c3f0..738d1f0d0 100644 --- a/simulations/geometryXVx/bump_on_tail/pdi_out.yml.hpp +++ b/simulations/geometryXVx/bump_on_tail/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/simulations/geometryXVx/landau/pdi_out.yml.hpp b/simulations/geometryXVx/landau/pdi_out.yml.hpp index 1aeaf9c18..55155ad89 100644 --- a/simulations/geometryXVx/landau/pdi_out.yml.hpp +++ b/simulations/geometryXVx/landau/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/simulations/geometryXY/guiding_center/pdi_out.yml.hpp b/simulations/geometryXY/guiding_center/pdi_out.yml.hpp index 8bcda46f0..a8a9dbe5c 100644 --- a/simulations/geometryXY/guiding_center/pdi_out.yml.hpp +++ b/simulations/geometryXY/guiding_center/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/simulations/geometryXYVxVy/landau/pdi_out.yml.hpp b/simulations/geometryXYVxVy/landau/pdi_out.yml.hpp index 82fb93808..4725e7efa 100644 --- a/simulations/geometryXYVxVy/landau/pdi_out.yml.hpp +++ b/simulations/geometryXYVxVy/landau/pdi_out.yml.hpp @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +#pragma once constexpr char const* const PDI_CFG = R"PDI_CFG( metadata: diff --git a/src/collisions/collisioninfo_radial.hpp b/src/collisions/collisioninfo_radial.hpp index fcc2c9cbf..e0727ba83 100644 --- a/src/collisions/collisioninfo_radial.hpp +++ b/src/collisions/collisioninfo_radial.hpp @@ -67,7 +67,7 @@ class CollisionInfoRadial double rpeak_on_r = rpeak / radial_profile(idx); double q_on_qrpeak = safety_factor(idx) / q_rpeak; nustar0_r(idx) - = nustar0_rpeak * q_on_qrpeak * rpeak_on_r * std::sqrt(rpeak_on_r); + = nustar0_rpeak * q_on_qrpeak * rpeak_on_r * Kokkos::sqrt(rpeak_on_r); }); } diff --git a/src/geometryXVx/geometryMX/fluidtransportsolver/diffusiveneutralsolver.cpp b/src/geometryXVx/geometryMX/fluidtransportsolver/diffusiveneutralsolver.cpp index 57a511bf1..26c490a7a 100644 --- a/src/geometryXVx/geometryMX/fluidtransportsolver/diffusiveneutralsolver.cpp +++ b/src/geometryXVx/geometryMX/fluidtransportsolver/diffusiveneutralsolver.cpp @@ -201,6 +201,8 @@ DFieldSpMomX DiffusiveNeutralSolver::operator()( DConstFieldVx quadrature_coeffs = m_quadrature_coeffs; + IdxRangeVx const idx_range_vx(get_idx_range(allfdistribu)); + // fluid moments computation ddc::parallel_fill(density, 0.); ddc::parallel_for_each( @@ -209,7 +211,7 @@ DFieldSpMomX DiffusiveNeutralSolver::operator()( KOKKOS_LAMBDA(IdxSpX const ispx) { double particle_flux(0); double momentum_flux(0); - for (IdxVx const ivx : get_idx_range(allfdistribu)) { + for (IdxVx const ivx : idx_range_vx) { CoordVx const coordv = ddc::coordinate(ivx); double const val(quadrature_coeffs(ivx) * allfdistribu(ispx, ivx)); density(ispx) += val; diff --git a/src/geometryXVx/geometryMX/kineticfluidcoupling/kinetic_fluid_coupling_source.cpp b/src/geometryXVx/geometryMX/kineticfluidcoupling/kinetic_fluid_coupling_source.cpp index 677d28eb3..b93268f02 100644 --- a/src/geometryXVx/geometryMX/kineticfluidcoupling/kinetic_fluid_coupling_source.cpp +++ b/src/geometryXVx/geometryMX/kineticfluidcoupling/kinetic_fluid_coupling_source.cpp @@ -136,6 +136,8 @@ void KineticFluidCouplingSource::operator()( DConstFieldVx quadrature_coeffs = get_const_field(m_quadrature_coeffs); + IdxRangeVx const idx_range_vx(get_idx_range(allfdistribu)); + ddc::parallel_fill(Kokkos::DefaultExecutionSpace(), kinsp_density, 0.); ddc::parallel_for_each( Kokkos::DefaultExecutionSpace(), @@ -143,7 +145,7 @@ void KineticFluidCouplingSource::operator()( KOKKOS_LAMBDA(IdxSpX const ispx) { double particle_flux(0); double momentum_flux(0); - for (IdxVx const ivx : get_idx_range(allfdistribu)) { + for (IdxVx const ivx : idx_range_vx) { CoordVx const coordv = ddc::coordinate(ivx); double const val(quadrature_coeffs(ivx) * allfdistribu(ispx, ivx)); kinsp_density(ispx) += val; diff --git a/src/geometryXVx/poisson/chargedensitycalculator.cpp b/src/geometryXVx/poisson/chargedensitycalculator.cpp index 0b3fceb10..93a2fd148 100644 --- a/src/geometryXVx/poisson/chargedensitycalculator.cpp +++ b/src/geometryXVx/poisson/chargedensitycalculator.cpp @@ -24,7 +24,7 @@ DFieldX ChargeDensityCalculator::operator()(DFieldX const rho, DConstFieldSpXVx rho, KOKKOS_LAMBDA(IdxXVx ixvx) { double sum = 0.0; - for (auto isp : get_idx_range(kinetic_charges)) { + for (auto isp : kin_species_idx_range) { sum += kinetic_charges(isp) * allfdistribu(isp, ixvx); } return sum; diff --git a/src/geometryXVx/rhs/collisions_inter.cpp b/src/geometryXVx/rhs/collisions_inter.cpp index 7b76ce172..e30e9ae10 100644 --- a/src/geometryXVx/rhs/collisions_inter.cpp +++ b/src/geometryXVx/rhs/collisions_inter.cpp @@ -36,9 +36,10 @@ void CollisionsInter::get_derivative(DFieldSpXVx const df, DConstFieldSpXVx cons auto fluid_velocity = get_field(fluid_velocity_f); auto temperature = get_field(temperature_f); + IdxRangeVx const idx_range_vx(get_idx_range(allfdistribu)); + DFieldMemVx quadrature_coeffs_alloc( - trapezoid_quadrature_coefficients( - get_idx_range(allfdistribu))); + trapezoid_quadrature_coefficients(idx_range_vx)); DFieldVx quadrature_coeffs = get_field(quadrature_coeffs_alloc); //Moments computation @@ -51,7 +52,7 @@ void CollisionsInter::get_derivative(DFieldSpXVx const df, DConstFieldSpXVx cons IdxX ix(ddc::select(ispx)); double particle_flux(0); double momentum_flux(0); - for (IdxVx ivx : get_idx_range(allfdistribu)) { + for (IdxVx ivx : idx_range_vx) { CoordVx const coordv = ddc::coordinate(ivx); double const val(quadrature_coeffs(ivx) * allfdistribu(isp, ix, ivx)); density(isp, ix) += val; diff --git a/src/geometryXVx/rhs/collisions_intra.cpp b/src/geometryXVx/rhs/collisions_intra.cpp index aa77ad90f..d1ad6849e 100644 --- a/src/geometryXVx/rhs/collisions_intra.cpp +++ b/src/geometryXVx/rhs/collisions_intra.cpp @@ -225,6 +225,8 @@ void CollisionsIntra::compute_rhs_vector( DConstFieldSpXVx allfdistribu, double fthresh) const { + IdxRangeVx const idx_range_vx(get_idx_range(AA)); + ddc::parallel_for_each( Kokkos::DefaultExecutionSpace(), get_idx_range(RR), @@ -236,12 +238,12 @@ void CollisionsIntra::compute_rhs_vector( IdxVx const ivx_next = ivx + 1; IdxVx const ivx_prev = ivx - 1; - if (ivx == get_idx_range(AA).front()) { + if (ivx == idx_range_vx.front()) { RR(isp, ix, ivx) = (2. - BB(isp, ix, ivx)) * allfdistribu(isp, ix, ivx) + (-CC(isp, ix, ivx)) * allfdistribu(isp, ix, ivx_next) - 2. * AA(isp, ix, ivx) * fthresh; - } else if (ivx == get_idx_range(AA).back()) { + } else if (ivx == idx_range_vx.back()) { RR(isp, ix, ivx) = (2. - BB(isp, ix, ivx)) * allfdistribu(isp, ix, ivx) + (-AA(isp, ix, ivx)) * allfdistribu(isp, ix, ivx_prev) - 2. * CC(isp, ix, ivx) * fthresh; @@ -276,6 +278,8 @@ DFieldSpXVx CollisionsIntra::operator()(DFieldSpXVx allfdistribu, double dt) con get_idx_range(allfdistribu))); DConstFieldVx quadrature_coeffs = get_const_field(quadrature_coeffs_alloc); + IdxRangeVx const idx_range_vx(get_idx_range(allfdistribu)); + //Moments computation ddc::parallel_fill(density, 0.); ddc::parallel_for_each( @@ -284,7 +288,7 @@ DFieldSpXVx CollisionsIntra::operator()(DFieldSpXVx allfdistribu, double dt) con KOKKOS_LAMBDA(IdxSpX const ispx) { double particle_flux(0); double momentum_flux(0); - for (IdxVx const ivx : get_idx_range(allfdistribu)) { + for (IdxVx const ivx : idx_range_vx) { CoordVx const coordv = ddc::coordinate(ivx); double const val(quadrature_coeffs(ivx) * allfdistribu(ispx, ivx)); density(ispx) += val; diff --git a/src/geometryXVx/rhs/collisions_utils.hpp b/src/geometryXVx/rhs/collisions_utils.hpp index 67036bb0b..7678260dc 100644 --- a/src/geometryXVx/rhs/collisions_utils.hpp +++ b/src/geometryXVx/rhs/collisions_utils.hpp @@ -206,11 +206,13 @@ void compute_Vcoll_Tcoll( ddc::parallel_fill(I3mean, 0.); ddc::parallel_fill(I4mean, 0.); + IdxRangeVx const idx_range_vx(get_idx_range(allfdistribu)); + ddc::parallel_for_each( Kokkos::DefaultExecutionSpace(), grid_sp_x, KOKKOS_LAMBDA(IdxSpX const ispx) { - for (IdxVx const ivx : get_idx_range(allfdistribu)) { + for (IdxVx const ivx : idx_range_vx) { I0mean(ispx) += quadrature_coeffs(ivx) * I0mean_integrand(ispx, ivx); I1mean(ispx) += quadrature_coeffs(ivx) * I1mean_integrand(ispx, ivx); I2mean(ispx) += quadrature_coeffs(ivx) * I2mean_integrand(ispx, ivx); diff --git a/src/geometryXVx/rhs/krook_source_adaptive.cpp b/src/geometryXVx/rhs/krook_source_adaptive.cpp index 2fced77c8..454be05dd 100644 --- a/src/geometryXVx/rhs/krook_source_adaptive.cpp +++ b/src/geometryXVx/rhs/krook_source_adaptive.cpp @@ -99,7 +99,7 @@ void KrookSourceAdaptive::get_amplitudes(DFieldSpX amplitudes, DConstFieldSpXVx double density_ion = 0.; double density_electron = 0.; - for (IdxVx ivx : get_idx_range(allfdistribu)) { + for (IdxVx ivx : gridvx) { density_ion += quadrature_coeffs(ivx) * allfdistribu(iion, ix, ivx); density_electron += quadrature_coeffs(ivx) * allfdistribu(ielec(), ix, ivx); } diff --git a/src/geometryXVx/time_integration/predcorr.cpp b/src/geometryXVx/time_integration/predcorr.cpp index 544c1b26d..c6f3fd859 100644 --- a/src/geometryXVx/time_integration/predcorr.cpp +++ b/src/geometryXVx/time_integration/predcorr.cpp @@ -5,9 +5,8 @@ #include -#include -#include - +#include "iboltzmannsolver.hpp" +#include "iqnsolver.hpp" #include "predcorr.hpp" PredCorr::PredCorr(IBoltzmannSolver const& boltzmann_solver, IQNSolver const& poisson_solver) diff --git a/src/geometryXYVxVy/poisson/chargedensitycalculator.cpp b/src/geometryXYVxVy/poisson/chargedensitycalculator.cpp index d72fc20e8..239832634 100644 --- a/src/geometryXYVxVy/poisson/chargedensitycalculator.cpp +++ b/src/geometryXYVxVy/poisson/chargedensitycalculator.cpp @@ -26,7 +26,7 @@ void ChargeDensityCalculator::operator()(DFieldXY rho, DConstFieldSpXYVxVy allfd rho, KOKKOS_LAMBDA(IdxXYVxVy idx) { double sum = 0.0; - for (auto isp : get_idx_range(kinetic_charges)) { + for (auto isp : kin_species_idx_range) { sum += kinetic_charges(isp) * allfdistribu(isp, idx); } return sum; diff --git a/src/interpolation/Lagrange.hpp b/src/interpolation/Lagrange.hpp index e5f2902be..5cb44ca67 100644 --- a/src/interpolation/Lagrange.hpp +++ b/src/interpolation/Lagrange.hpp @@ -148,7 +148,7 @@ KOKKOS_INLINE_FUNCTION double Lagrange::app CoordDimI bc_val = x_interp; const double d = m_right_bound - m_left_bound; if constexpr (BcMin == BCond::PERIODIC) { - bc_val -= std::floor((x_interp - m_left_bound) / d) * d; + bc_val -= Kokkos::floor((x_interp - m_left_bound) / d) * d; } else { if (x_interp < m_left_bound && BcMin == BCond::DIRICHLET) { bc_val = m_left_bound; @@ -181,9 +181,9 @@ KOKKOS_INLINE_FUNCTION double Lagrange::eva IdxInterp mid = icell; if (mid >= m_inner_idx_range.back() && BcMax == BCond::PERIODIC) { begin = mid - m_poly_support / 2; - end = std::min(m_inner_idx_range.back(), begin + m_poly_support); + end = Kokkos::min(m_inner_idx_range.back(), begin + m_poly_support); } else if (mid <= m_inner_idx_range.front() && BcMin == BCond::PERIODIC) { - begin = std::max(m_idx_range.front(), mid - m_poly_support / 2); + begin = Kokkos::max(m_idx_range.front(), mid - m_poly_support / 2); end = begin + m_poly_support; } else { if (m_inner_idx_range.front() + m_poly_support / 2 > mid) { @@ -191,7 +191,7 @@ KOKKOS_INLINE_FUNCTION double Lagrange::eva } else { begin = mid - m_poly_support / 2; } - end = std::min(m_idx_range.back() + IdxStepInterp(1), begin + m_poly_support); + end = Kokkos::min(m_idx_range.back() + IdxStepInterp(1), begin + m_poly_support); } if (end == m_idx_range.back()) diff --git a/src/interpolation/Lagrange_interpolator.hpp b/src/interpolation/Lagrange_interpolator.hpp index 68b60250a..5f2bc399d 100644 --- a/src/interpolation/Lagrange_interpolator.hpp +++ b/src/interpolation/Lagrange_interpolator.hpp @@ -89,16 +89,14 @@ class LagrangeInterpolator : public IInterpolator = ddc::create_mirror_and_copy(Kokkos::DefaultExecutionSpace(), inout_data); auto inout_data_tmp = get_field(inout_data_tmp_alloc); auto batch_idx_range = ddc::remove_dims_of(get_idx_range(inout_data)); + auto const interp_range = get_idx_range(inout_data); ddc::parallel_for_each( Kokkos::DefaultExecutionSpace(), batch_idx_range, KOKKOS_LAMBDA(typename decltype(batch_idx_range)::discrete_element_type const i) { - Lagrange evaluator( - deg, - inout_data_tmp[i], - get_idx_range(inout_data), - ghost); - for (Idx j : get_idx_range(inout_data)) { + Lagrange + evaluator(deg, inout_data_tmp[i], interp_range, ghost); + for (Idx j : interp_range) { inout_data(i, j) = evaluator.evaluate(coordinates(i, j)); } }); diff --git a/src/multipatch/connectivity/connectivity_details.hpp b/src/multipatch/connectivity/connectivity_details.hpp index 70a6b2196..1a874c026 100644 --- a/src/multipatch/connectivity/connectivity_details.hpp +++ b/src/multipatch/connectivity/connectivity_details.hpp @@ -426,12 +426,12 @@ struct FindRelevantIdxRangeType> }; /// Specialisation of FindRelevantIdxRangeType to iterate recursively over the possible index range types. -template -struct FindRelevantIdxRangeType> +template +struct FindRelevantIdxRangeType> { /// The type found by the class. using type = ddc::type_seq_merge_t< - typename SelectRelevantIdxRangeType::type, + typename SelectRelevantIdxRangeType::type, typename FindRelevantIdxRangeType>::type>; }; diff --git a/src/utils/ddc_alias_inline_functions.hpp b/src/utils/ddc_alias_inline_functions.hpp index be9eaeb3d..0ee192df8 100644 --- a/src/utils/ddc_alias_inline_functions.hpp +++ b/src/utils/ddc_alias_inline_functions.hpp @@ -79,7 +79,7 @@ static constexpr bool is_gslx_field_v = detail::IsGslxField::value; * @returns The index range. */ template -KOKKOS_INLINE_FUNCTION auto get_idx_range(FieldType const& field) noexcept +auto get_idx_range(FieldType const& field) noexcept { static_assert( ddc::is_chunk_v || has_idx_range_v, diff --git a/src/utils/preprocessor.hpp b/src/utils/preprocessor.hpp index ababe6723..9df05820a 100644 --- a/src/utils/preprocessor.hpp +++ b/src/utils/preprocessor.hpp @@ -1,5 +1,4 @@ // SPDX-License-Identifier: MIT - #pragma once //////////////////////////////////////// diff --git a/src/utils/utils_tools.hpp b/src/utils/utils_tools.hpp index 620b18626..747b6e8fd 100644 --- a/src/utils/utils_tools.hpp +++ b/src/utils/utils_tools.hpp @@ -23,7 +23,7 @@ template KOKKOS_FUNCTION double norm_inf(ddc::Coordinate coord) { double result = 0.0; - ((result = std::max(result, fabs(coord.template get()))), ...); + ((result = Kokkos::max(result, Kokkos::fabs(coord.template get()))), ...); return result; } diff --git a/toolchains/v100.persee/toolchain.cmake b/toolchains/v100.persee/toolchain.cmake index a8414c59c..f4d8a4014 100644 --- a/toolchains/v100.persee/toolchain.cmake +++ b/toolchains/v100.persee/toolchain.cmake @@ -6,7 +6,7 @@ set(CMAKE_BUILD_TYPE Release) # Compiler options set(CMAKE_CXX_COMPILER ${PROJECT_SOURCE_DIR}/vendor/kokkos/bin/nvcc_wrapper) -set(CMAKE_CXX_FLAGS "-Wall -Wno-sign-compare -Xcudafe --diag_suppress=unsigned_compare_with_zero -Xcudafe --diag_suppress=integer_sign_change") +set(CMAKE_CXX_FLAGS "-Wall -Wno-sign-compare --Werror cross-execution-space-call -Xcudafe --diag_suppress=unsigned_compare_with_zero -Xcudafe --diag_suppress=integer_sign_change") # Gyselalibxx options set(GYSELALIBXX_DEFAULT_CXX_FLAGS "" CACHE STRING "Default flags for C++ specific to Voice++" FORCE)