From 744522cfe62d7245f0e6a0f2f9ad250928f72aa8 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sun, 28 Jan 2024 17:58:59 -0500 Subject: [PATCH 1/2] add some checks on dynamic_casts in gravity --- Source/gravity/Gravity.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Source/gravity/Gravity.cpp b/Source/gravity/Gravity.cpp index 6665b0ef38..983ab6ffc5 100644 --- a/Source/gravity/Gravity.cpp +++ b/Source/gravity/Gravity.cpp @@ -1843,8 +1843,11 @@ Gravity::fill_multipole_BCs(int crse_level, int fine_level, const Vector(&(parent->getLevel(lev+1)))->build_fine_mask(); - MultiFab::Multiply(source, mask, 0, 0, 1, 0); + auto *castro_level = dynamic_cast(&(parent->getLevel(lev+1))); + if (castro_level != nullptr) { + const MultiFab& mask = castro_level->build_fine_mask(); + MultiFab::Multiply(source, mask, 0, 0, 1, 0); + } } // Loop through the grids and compute the individual contributions @@ -2967,7 +2970,9 @@ Gravity::set_mass_offset (Real time, bool multi_level) { for (int lev = 0; lev <= parent->finestLevel(); lev++) { auto* cs = dynamic_cast(&parent->getLevel(lev)); - mass_offset += cs->volWgtSum("density", time); + if (cs != nullptr) { + mass_offset += cs->volWgtSum("density", time); + } } } else @@ -3131,10 +3136,12 @@ Gravity::make_radial_gravity(int level, Real time, RealVector& radial_grav) if (lev < level) { auto* fine_level = dynamic_cast(&(parent->getLevel(lev+1))); - const MultiFab& mask = fine_level->build_fine_mask(); - for (int n = 0; n < NUM_STATE; ++n) { - MultiFab::Multiply(S, mask, 0, n, 1, 0); - } + if (fine_level != nullptr) { + const MultiFab& mask = fine_level->build_fine_mask(); + for (int n = 0; n < NUM_STATE; ++n) { + MultiFab::Multiply(S, mask, 0, n, 1, 0); + } + } } int n1d = static_cast(radial_mass[lev].size()); From 497675027e3f1321907036b1deb904d61e4c3fca Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sun, 28 Jan 2024 19:52:07 -0500 Subject: [PATCH 2/2] add aborts --- Source/gravity/Gravity.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Source/gravity/Gravity.cpp b/Source/gravity/Gravity.cpp index 129051f5ba..09fcad26a7 100644 --- a/Source/gravity/Gravity.cpp +++ b/Source/gravity/Gravity.cpp @@ -1848,7 +1848,9 @@ Gravity::fill_multipole_BCs(int crse_level, int fine_level, const Vectorbuild_fine_mask(); MultiFab::Multiply(source, mask, 0, 0, 1, 0); - } + } else { + amrex::Abort("unable to access mask"); + } } // Loop through the grids and compute the individual contributions @@ -2973,7 +2975,9 @@ Gravity::set_mass_offset (Real time, bool multi_level) auto* cs = dynamic_cast(&parent->getLevel(lev)); if (cs != nullptr) { mass_offset += cs->volWgtSum("density", time); - } + } else { + amrex::Abort("unable to access volWgtSum"); + } } } else @@ -3142,7 +3146,9 @@ Gravity::make_radial_gravity(int level, Real time, RealVector& radial_grav) for (int n = 0; n < NUM_STATE; ++n) { MultiFab::Multiply(S, mask, 0, n, 1, 0); } - } + } else { + amrex::Abort("unable to create mask"); + } } int n1d = static_cast(radial_mass[lev].size());