From 46656318081e84c262f6f4b54f78d8e449c44df8 Mon Sep 17 00:00:00 2001 From: NeilZaim <49716072+NeilZaim@users.noreply.github.com> Date: Thu, 3 Sep 2020 12:01:45 +0200 Subject: Add structure for resampling algorithms (#1265) * First version of resampling structure * Remove new warnings * Added Doxygen comments * Minor modifications * Add do_resampling() in OneStep_sub1 * Apply suggestions from code review Co-authored-by: Luca Fedeli * Use mutable in ResamplingTrigger and replace run with operator() * Apply suggestions from code review Co-authored-by: MaxThevenet * Make LevelingThinning operator() final Co-authored-by: Luca Fedeli Co-authored-by: MaxThevenet --- Source/Particles/Resampling/ResamplingTrigger.cpp | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Source/Particles/Resampling/ResamplingTrigger.cpp (limited to 'Source/Particles/Resampling/ResamplingTrigger.cpp') diff --git a/Source/Particles/Resampling/ResamplingTrigger.cpp b/Source/Particles/Resampling/ResamplingTrigger.cpp new file mode 100644 index 000000000..3f0b512cf --- /dev/null +++ b/Source/Particles/Resampling/ResamplingTrigger.cpp @@ -0,0 +1,38 @@ +/* Copyright 2019-2020 Neil Zaim + * + * This file is part of WarpX. + * + * License: BSD-3-Clause-LBNL + */ +#include "ResamplingTrigger.H" +#include "WarpX.H" + +ResamplingTrigger::ResamplingTrigger () +{ + amrex::ParmParse pprt("resampling_trigger"); + + std::string resampling_trigger_int_string = "0"; + pprt.query("intervals", resampling_trigger_int_string); + m_resampling_intervals = IntervalsParser(resampling_trigger_int_string); + + pprt.query("max_avg_ppc", m_max_avg_ppc); +} + +bool ResamplingTrigger::triggered (const int timestep, const amrex::Real global_numparts) const +{ + if (!m_initialized) {initialize_global_numcells();}; + + const amrex::Real avg_ppc = global_numparts/m_global_numcells; + return (m_resampling_intervals.contains(timestep) || + avg_ppc > m_max_avg_ppc); +} + +void ResamplingTrigger::initialize_global_numcells () const +{ + auto & warpx = WarpX::GetInstance(); + for (int lev = 0; lev <= warpx.maxLevel(); lev++) + { + m_global_numcells += warpx.boxArray(lev).numPts(); + } + m_initialized = true; +} -- cgit v1.2.3