From f336699e709f4c4c4255adea3c86d2203a3ddd54 Mon Sep 17 00:00:00 2001 From: "Marc T. Henry de Frahan" Date: Thu, 22 Aug 2024 11:40:48 -0600 Subject: [PATCH] Reduce memory usage of the samplers again (#1209) --- amr-wind/utilities/sampling/DTUSpinnerSampler.H | 2 +- amr-wind/utilities/sampling/DTUSpinnerSampler.cpp | 4 +++- amr-wind/utilities/sampling/FreeSurfaceSampler.H | 2 +- amr-wind/utilities/sampling/FreeSurfaceSampler.cpp | 4 +++- amr-wind/utilities/sampling/LidarSampler.H | 2 +- amr-wind/utilities/sampling/LidarSampler.cpp | 4 +++- amr-wind/utilities/sampling/RadarSampler.H | 2 +- amr-wind/utilities/sampling/RadarSampler.cpp | 4 +++- amr-wind/utilities/sampling/SamplerBase.H | 2 +- amr-wind/utilities/sampling/Sampling.cpp | 10 ++++++++-- .../test_files/dam_break_godunov/dam_break_godunov.inp | 2 +- 11 files changed, 26 insertions(+), 12 deletions(-) diff --git a/amr-wind/utilities/sampling/DTUSpinnerSampler.H b/amr-wind/utilities/sampling/DTUSpinnerSampler.H index 69bbfc4fd6..3f03c82c9c 100644 --- a/amr-wind/utilities/sampling/DTUSpinnerSampler.H +++ b/amr-wind/utilities/sampling/DTUSpinnerSampler.H @@ -60,7 +60,7 @@ public: /** Determine how the subsampling will be done * */ - void update_sampling_locations() override; + bool update_sampling_locations() override; void post_sample_actions() override {}; diff --git a/amr-wind/utilities/sampling/DTUSpinnerSampler.cpp b/amr-wind/utilities/sampling/DTUSpinnerSampler.cpp index 0f3d944b07..cf87ab5679 100644 --- a/amr-wind/utilities/sampling/DTUSpinnerSampler.cpp +++ b/amr-wind/utilities/sampling/DTUSpinnerSampler.cpp @@ -259,7 +259,7 @@ void DTUSpinnerSampler::get_turbine_data(const std::string& turbine_label) } #endif // AMR_WIND_USE_OPENFAST -void DTUSpinnerSampler::update_sampling_locations() +bool DTUSpinnerSampler::update_sampling_locations() { BL_PROFILE( "amr-wind::Sampling::DTUSpinnerSampler::update_sampling_locations"); @@ -435,6 +435,8 @@ void DTUSpinnerSampler::update_sampling_locations() m_last_lidar_center = m_lidar_center; m_update_count = m_update_count + 1; + + return true; } #ifdef AMR_WIND_USE_NETCDF diff --git a/amr-wind/utilities/sampling/FreeSurfaceSampler.H b/amr-wind/utilities/sampling/FreeSurfaceSampler.H index 63fe19efd1..e452a44e84 100644 --- a/amr-wind/utilities/sampling/FreeSurfaceSampler.H +++ b/amr-wind/utilities/sampling/FreeSurfaceSampler.H @@ -27,7 +27,7 @@ public: } //! Find heights associated with 2D sample locations - void update_sampling_locations() override; + bool update_sampling_locations() override; //! Redo some of the initialization work when the grid changes void post_regrid_actions() override; diff --git a/amr-wind/utilities/sampling/FreeSurfaceSampler.cpp b/amr-wind/utilities/sampling/FreeSurfaceSampler.cpp index a2b1af5aca..1e5f02fd9a 100644 --- a/amr-wind/utilities/sampling/FreeSurfaceSampler.cpp +++ b/amr-wind/utilities/sampling/FreeSurfaceSampler.cpp @@ -354,7 +354,7 @@ void FreeSurfaceSampler::sampling_locations(SampleLocType& locs) const } } -void FreeSurfaceSampler::update_sampling_locations() +bool FreeSurfaceSampler::update_sampling_locations() { BL_PROFILE("amr-wind::FreeSurfaceSampler::update_sampling_locations"); @@ -525,6 +525,8 @@ void FreeSurfaceSampler::update_sampling_locations() dout_ptr[n] = plo0[coorddir]; }); } + + return true; } void FreeSurfaceSampler::post_regrid_actions() diff --git a/amr-wind/utilities/sampling/LidarSampler.H b/amr-wind/utilities/sampling/LidarSampler.H index 0fe142cbfc..3d427865a8 100644 --- a/amr-wind/utilities/sampling/LidarSampler.H +++ b/amr-wind/utilities/sampling/LidarSampler.H @@ -33,7 +33,7 @@ public: * * */ - void update_sampling_locations() override; + bool update_sampling_locations() override; void post_sample_actions() override {}; diff --git a/amr-wind/utilities/sampling/LidarSampler.cpp b/amr-wind/utilities/sampling/LidarSampler.cpp index 472fc63b2e..83dbd6a665 100644 --- a/amr-wind/utilities/sampling/LidarSampler.cpp +++ b/amr-wind/utilities/sampling/LidarSampler.cpp @@ -60,7 +60,7 @@ void LidarSampler::initialize(const std::string& key) check_bounds(); } -void LidarSampler::update_sampling_locations() +bool LidarSampler::update_sampling_locations() { amrex::Real time = m_sim.time().current_time(); @@ -84,6 +84,8 @@ void LidarSampler::update_sampling_locations() m_end[1] = m_start[1] + m_length * std::sin(current_azimuth) * std::sin(current_elevation); m_end[2] = m_start[2] + m_length * std::cos(current_elevation); + + return true; } #ifdef AMR_WIND_USE_NETCDF diff --git a/amr-wind/utilities/sampling/RadarSampler.H b/amr-wind/utilities/sampling/RadarSampler.H index ac67a6e246..22f4e96979 100644 --- a/amr-wind/utilities/sampling/RadarSampler.H +++ b/amr-wind/utilities/sampling/RadarSampler.H @@ -47,7 +47,7 @@ public: //! Populate and return a vector of probe locations to be sampled void sampling_locations(SampleLocType& /*locs*/) const override; - void update_sampling_locations() override; + bool update_sampling_locations() override; void cone_axis_locations(SampleLocType& /*locs*/) const; void output_locations(SampleLocType& locs) const override { diff --git a/amr-wind/utilities/sampling/RadarSampler.cpp b/amr-wind/utilities/sampling/RadarSampler.cpp index 53d6302ac0..d70767a56e 100644 --- a/amr-wind/utilities/sampling/RadarSampler.cpp +++ b/amr-wind/utilities/sampling/RadarSampler.cpp @@ -188,7 +188,7 @@ double RadarSampler::determine_current_sweep_angle() const } } -void RadarSampler::update_sampling_locations() +bool RadarSampler::update_sampling_locations() { amrex::Real time = m_sim.time().current_time(); amrex::Real start_time = m_sim.time().start_time(); @@ -306,6 +306,8 @@ void RadarSampler::update_sampling_locations() } m_radar_iter++; + + return true; } void RadarSampler::new_cone() diff --git a/amr-wind/utilities/sampling/SamplerBase.H b/amr-wind/utilities/sampling/SamplerBase.H index 9151693462..1fb027cfc5 100644 --- a/amr-wind/utilities/sampling/SamplerBase.H +++ b/amr-wind/utilities/sampling/SamplerBase.H @@ -56,7 +56,7 @@ public: virtual void output_locations(SampleLocType&) const = 0; //! Update the sampling locations - virtual void update_sampling_locations() {} + virtual bool update_sampling_locations() { return false; } //! Run actions after sample (useful in interpolated subsampling) virtual void post_sample_actions() {} diff --git a/amr-wind/utilities/sampling/Sampling.cpp b/amr-wind/utilities/sampling/Sampling.cpp index d1f0c7cd4b..a15d181aef 100644 --- a/amr-wind/utilities/sampling/Sampling.cpp +++ b/amr-wind/utilities/sampling/Sampling.cpp @@ -164,11 +164,17 @@ void Sampling::update_sampling_locations() { BL_PROFILE("amr-wind::Sampling::update_sampling_locations"); + amrex::Vector updated_position; for (const auto& obj : m_samplers) { - obj->update_sampling_locations(); + const bool updated_pos = obj->update_sampling_locations(); + updated_position.push_back(updated_pos); } - update_container(); + if (std::any_of( + updated_position.begin(), updated_position.end(), + [](const auto& v) { return v; })) { + update_container(); + } } void Sampling::post_advance_work() diff --git a/test/test_files/dam_break_godunov/dam_break_godunov.inp b/test/test_files/dam_break_godunov/dam_break_godunov.inp index a7358654f4..32f0638c74 100644 --- a/test/test_files/dam_break_godunov/dam_break_godunov.inp +++ b/test/test_files/dam_break_godunov/dam_break_godunov.inp @@ -8,7 +8,7 @@ time.plot_interval = 10 # Steps between plot files time.checkpoint_interval = -100 # Steps between checkpoint files incflo.post_processing = sampling -sampling.output_frequency = 30 +sampling.output_frequency = 10 sampling.output_format = native sampling.labels = fs sampling.fields = velocity