@@ -292,6 +292,7 @@ template <typename problem_t> class QuokkaSimulation : public AMRSimulation<prob
292292
293293 // compute derived variables
294294 void ComputeDerivedVar (int lev, std::string const &dname, amrex::MultiFab &mf, int ncomp) const override ;
295+ void ComputeDensityFloorDebug (int lev, amrex::MultiFab &mf, int ncomp) const override ;
295296
296297 // compute projected vars
297298 [[nodiscard]] auto ComputeProjections (amrex::Direction dir) const -> std::unordered_map<std::string, amrex::BaseFab<amrex::Real>> override ;
@@ -979,17 +980,27 @@ auto QuokkaSimulation<problem_t>::addStrangSplitSourcesWithBuiltin(amrex::MultiF
979980template <typename problem_t > void QuokkaSimulation<problem_t >::ComputeDerivedVar(int lev, std::string const &dname, amrex::MultiFab &mf, const int ncomp) const
980981{
981982 // compute derived variables and save in 'mf' -- user should implement
982- static constexpr char const *kDensityFloorDbgName = " density_floor_dbg" ;
983- if (dname == kDensityFloorDbgName ) {
984- auto arr = mf.arrays ();
985- auto const geom_data = geom[lev].data ();
986- auto const prob_lo = geom_data.ProbLo ();
987- auto const dx = geom_data.CellSize ();
988- auto const density_floor = densityFloor_;
983+ (void )lev;
984+ (void )dname;
985+ (void )mf;
986+ (void )ncomp;
987+ }
989988
990- if (this ->useDensityFloorParser_ ) {
991- auto const density_floor_parser = this ->densityFloorParserExe_ .value ();
992- amrex::ParallelFor (mf, [=] AMREX_GPU_DEVICE (int bx, int i, int j, int k) noexcept {
989+ template <typename problem_t > void QuokkaSimulation<problem_t >::ComputeDensityFloorDebug(int lev, amrex::MultiFab &mf, int ncomp) const
990+ {
991+ auto const ncomp_out = ncomp;
992+ auto const geom_data = geom[lev].data ();
993+ auto const prob_lo = geom_data.ProbLo ();
994+ auto const dx = geom_data.CellSize ();
995+ auto const density_floor = densityFloor_;
996+ auto const ngrow = mf.nGrow ();
997+
998+ if (this ->useDensityFloorParser_ ) {
999+ auto const density_floor_parser = this ->densityFloorParserExe_ .value ();
1000+ for (amrex::MFIter iter (mf); iter.isValid (); ++iter) {
1001+ amrex::Box const &box = iter.growntilebox (ngrow);
1002+ auto const &arr = mf.array (iter);
1003+ amrex::ParallelFor (box, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
9931004 amrex::Real const x = prob_lo[0 ] + (static_cast <amrex::Real>(i) + static_cast <amrex::Real>(0.5 )) * dx[0 ];
9941005#if (AMREX_SPACEDIM >= 2)
9951006 amrex::Real const y = prob_lo[1 ] + (static_cast <amrex::Real>(j) + static_cast <amrex::Real>(0.5 )) * dx[1 ];
@@ -1001,14 +1012,18 @@ template <typename problem_t> void QuokkaSimulation<problem_t>::ComputeDerivedVa
10011012#else
10021013 amrex::Real const z = 0.0 ;
10031014#endif
1004- arr[bx] (i, j, k, ncomp ) = density_floor_parser (x, y, z, density_floor);
1015+ arr (i, j, k, ncomp_out ) = density_floor_parser (x, y, z, density_floor);
10051016 });
1006- } else {
1007- auto const density_floor_func = [this ] AMREX_GPU_HOST_DEVICE (amrex::Real x, amrex::Real y, amrex::Real z,
1008- amrex::Real base_density_floor) -> amrex::Real {
1009- return densityFloor (x, y, z, base_density_floor);
1010- };
1011- amrex::ParallelFor (mf, [=] AMREX_GPU_DEVICE (int bx, int i, int j, int k) noexcept {
1017+ }
1018+ } else {
1019+ auto const density_floor_func = [this ] AMREX_GPU_HOST_DEVICE (amrex::Real x, amrex::Real y, amrex::Real z,
1020+ amrex::Real base_density_floor) -> amrex::Real {
1021+ return densityFloor (x, y, z, base_density_floor);
1022+ };
1023+ for (amrex::MFIter iter (mf); iter.isValid (); ++iter) {
1024+ amrex::Box const &box = iter.growntilebox (ngrow);
1025+ auto const &arr = mf.array (iter);
1026+ amrex::ParallelFor (box, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
10121027 amrex::Real const x = prob_lo[0 ] + (static_cast <amrex::Real>(i) + static_cast <amrex::Real>(0.5 )) * dx[0 ];
10131028#if (AMREX_SPACEDIM >= 2)
10141029 amrex::Real const y = prob_lo[1 ] + (static_cast <amrex::Real>(j) + static_cast <amrex::Real>(0.5 )) * dx[1 ];
@@ -1020,10 +1035,11 @@ template <typename problem_t> void QuokkaSimulation<problem_t>::ComputeDerivedVa
10201035#else
10211036 amrex::Real const z = 0.0 ;
10221037#endif
1023- arr[bx] (i, j, k, ncomp ) = density_floor_func (x, y, z, density_floor);
1038+ arr (i, j, k, ncomp_out ) = density_floor_func (x, y, z, density_floor);
10241039 });
10251040 }
10261041 }
1042+ amrex::Gpu::streamSynchronize ();
10271043}
10281044
10291045template <typename problem_t >
0 commit comments