template <typename problem_t>
template <typename F>
void HyperbolicSystem<problem_t>::PredictStep(
arrayconst_t &consVarOld, array_t &consVarNew,
std::array<arrayconst_t, AMREX_SPACEDIM> fluxArray, const double dt_in,
amrex::GpuArray<amrex::Real, AMREX_SPACEDIM> dx_in, amrex::Box const &indexRange,
const int nvars, F&& isStateValid, amrex::Array4<int> const &redoFlag)
{
auto const dt = dt_in;
auto const dx = dx_in[0];
auto const x1Flux = fluxArray[0];
#if (AMREX_SPACEDIM >= 2)
auto const dy = dx_in[1];
auto const x2Flux = fluxArray[1];
#endif
#if (AMREX_SPACEDIM == 3)
auto const dz = dx_in[2];
auto const x3Flux = fluxArray[2];
#endif
amrex::ParallelFor(
indexRange, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept {
for (int n = 0; n < nvars; ++n) {
consVarNew(i, j, k, n) =
consVarOld(i, j, k, n) +
(AMREX_D_TERM( (dt / dx) * (x1Flux(i, j, k, n) - x1Flux(i + 1, j, k, n)),
+ (dt / dy) * (x2Flux(i, j, k, n) - x2Flux(i, j + 1, k, n)),
+ (dt / dz) * (x3Flux(i, j, k, n) - x3Flux(i, j, k + 1, n))
));
}
// check if state is valid -- flag for re-do if not
if (!isStateValid(consVarNew, i, j, k)) {
redoFlag(i, j, k) = quokka::redoFlag::redo;
} else {
redoFlag(i, j, k) = quokka::redoFlag::none;
}
});
}
[137/219] Building CUDA object src/Advection/CMakeFiles/test_advection.dir/test_advection.cpp.o
FAILED: src/Advection/CMakeFiles/test_advection.dir/test_advection.cpp.o
/usr/local/cuda-11.5/bin/nvcc -forward-unknown-to-host-compiler -DHAVE_PYTHON -I/usr/include/python3.6m -I/avatar/bwibking/quokka/src -I/avatar/bwibking/quokka/extern/amrex/Src/Base -I/avatar/bwibking/quokka/extern/amrex/Src/Base/Parser -I/avatar/bwibking/quokka/extern/amrex/Src/Boundary -I/avatar/bwibking/quokka/extern/amrex/Src/AmrCore -I/avatar/bwibking/quokka/build/amrex -I/avatar/bwibking/quokka/extern/fmt/include -isystem=/avatar/bwibking/spack/opt/spack/linux-rocky8-skylake_avx512/gcc-8.4.1/openmpi-4.1.2-tsfc7y5zaav3q77d3trmeja4273mayvi/include --fmad=false -O3 -DNDEBUG --generate-code=arch=compute_70,code=[compute_70,sm_70] --generate-code=arch=compute_80,code=[compute_80,sm_80] --expt-relaxed-constexpr --expt-extended-lambda -Xcudafe --diag_suppress=esa_on_defaulted_function_ignored -maxrregcount=255 -Xcudafe --display_error_number --Wext-lambda-captures-this --generate-line-info --source-in-ptx -Xcompiler -pthread -std=c++17 -MD -MT src/Advection/CMakeFiles/test_advection.dir/test_advection.cpp.o -MF src/Advection/CMakeFiles/test_advection.dir/test_advection.cpp.o.d -x cu -dc /avatar/bwibking/quokka/src/Advection/test_advection.cpp -o src/Advection/CMakeFiles/test_advection.dir/test_advection.cpp.o
nvcc_internal_extended_lambda_implementation: In instantiation of ‘struct __nv_dl_wrapper_t<__nv_dl_tag<void (*)(const amrex::Array4<const double>&, const amrex::Array4<double>&, std::array<const amrex::Array4<const double>, 1>, double, amrex::GpuArray<double, 1>, const amrex::Box&, int, bool (&)(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int>&), HyperbolicSystem<SawtoothProblem>::PredictStep<bool (&)(const amrex::Array4<const double>&, int, int, int)>, 1>, const int, const amrex::Array4<double>, const amrex::Array4<const double>, const double, const double, const amrex::Array4<const double>, bool(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int> >’:
/avatar/bwibking/quokka/src/hyperbolic_system.hpp:347:32: required from ‘static void HyperbolicSystem<problem_t>::PredictStep(arrayconst_t&, array_t&, std::array<const amrex::Array4<const double>, 1>, double, amrex::GpuArray<double, 1>, const amrex::Box&, int, F&&, const amrex::Array4<int>&) [with F = bool (&)(const amrex::Array4<const double>&, int, int, int); problem_t = SawtoothProblem; arrayconst_t = const amrex::Array4<const double>; array_t = const amrex::Array4<double>]’
/tmp/tmpxft_00173f31_00000000-6_test_advection.compute_80.cudafe1.stub.c:53:613: required from here
nvcc_internal_extended_lambda_implementation:262:43: error: field ‘__nv_dl_wrapper_t<__nv_dl_tag<void (*)(const amrex::Array4<const double>&, const amrex::Array4<double>&, std::array<const amrex::Array4<const double>, 1>, double, amrex::GpuArray<double, 1>, const amrex::Box&, int, bool (&)(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int>&), HyperbolicSystem<SawtoothProblem>::PredictStep<bool (&)(const amrex::Array4<const double>&, int, int, int)>, 1>, const int, const amrex::Array4<double>, const amrex::Array4<const double>, const double, const double, const amrex::Array4<const double>, bool(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int> >::f7’ invalidly declared function type
nvcc_internal_extended_lambda_implementation: In instantiation of ‘struct __nv_dl_wrapper_t<__nv_dl_tag<void (*)(const amrex::Array4<double>&, const amrex::Array4<const double>&, const amrex::Array4<const double>&, std::array<const amrex::Array4<const double>, 1>, double, amrex::GpuArray<double, 1>, const amrex::Box&, int, bool (&)(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int>&), HyperbolicSystem<SawtoothProblem>::AddFluxesRK2<bool (&)(const amrex::Array4<const double>&, int, int, int)>, 1>, const int, const amrex::Array4<const double>, const amrex::Array4<const double>, const double, const double, const amrex::Array4<const double>, const amrex::Array4<double>, bool(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int> >’:
/avatar/bwibking/quokka/src/hyperbolic_system.hpp:394:32: required from ‘static void HyperbolicSystem<problem_t>::AddFluxesRK2(array_t&, arrayconst_t&, arrayconst_t&, std::array<const amrex::Array4<const double>, 1>, double, amrex::GpuArray<double, 1>, const amrex::Box&, int, F&&, const amrex::Array4<int>&) [with F = bool (&)(const amrex::Array4<const double>&, int, int, int); problem_t = SawtoothProblem; array_t = const amrex::Array4<double>; arrayconst_t = const amrex::Array4<const double>]’
/tmp/tmpxft_00173f31_00000000-6_test_advection.compute_80.cudafe1.stub.c:54:655: required from here
nvcc_internal_extended_lambda_implementation:278:43: error: field ‘__nv_dl_wrapper_t<__nv_dl_tag<void (*)(const amrex::Array4<double>&, const amrex::Array4<const double>&, const amrex::Array4<const double>&, std::array<const amrex::Array4<const double>, 1>, double, amrex::GpuArray<double, 1>, const amrex::Box&, int, bool (&)(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int>&), HyperbolicSystem<SawtoothProblem>::AddFluxesRK2<bool (&)(const amrex::Array4<const double>&, int, int, int)>, 1>, const int, const amrex::Array4<const double>, const amrex::Array4<const double>, const double, const double, const amrex::Array4<const double>, const amrex::Array4<double>, bool(const amrex::Array4<const double>&, int, int, int), const amrex::Array4<int> >::f8’ invalidly declared function type