Skip to content

Commit 3601ed2

Browse files
committed
reduce reliance on WarpX::GetInstance()
1 parent a59d328 commit 3601ed2

File tree

6 files changed

+58
-30
lines changed

6 files changed

+58
-30
lines changed

Source/Diagnostics/Diagnostics.H

+24-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,26 @@
2222
#include <vector>
2323

2424
/** All types of diagnostics. */
25-
enum struct DiagTypes {Full, BackTransformed, BoundaryScraping, TimeAveraged};
25+
enum struct DiagTypes
26+
{
27+
Full,
28+
BackTransformed,
29+
BoundaryScraping,
30+
TimeAveraged
31+
};
32+
33+
/** A struct containing the parameters required to initialize a diagnostics */
34+
struct InitDiagnosticsParameters
35+
{
36+
int finest_level;
37+
int max_level;
38+
39+
int do_moving_window;
40+
int moving_window_dir;
41+
amrex::Real moving_window_x;
42+
amrex::Real cell_size_lev0_mwdir;
43+
};
44+
2645
/**
2746
* \brief base class for diagnostics.
2847
* Contains main routines to filter, compute and flush diagnostics.
@@ -71,9 +90,10 @@ public:
7190
* (including metadata listing the total number of particles) even if the snapshot is incomplete
7291
*/
7392
virtual void Flush (int i_buffer, bool force_flush) = 0;
93+
7494
/** Initialize pointers to main fields and allocate output multifab m_mf_output. */
75-
void InitData ();
76-
void InitDataBeforeRestart ();
95+
void InitData (const InitDiagnosticsParameters& params);
96+
void InitDataBeforeRestart (const InitDiagnosticsParameters& params);
7797
void InitDataAfterRestart ();
7898
/** Initialize functors that store pointers to the fields requested by the user.
7999
*
@@ -193,7 +213,7 @@ protected:
193213
/** Whether to output a message when diagnostics are output */
194214
int m_verbose = 2;
195215
/** Initialize member variables of the base Diagnostics class. */
196-
void InitBaseData ();
216+
void InitBaseData (const InitDiagnosticsParameters& params);
197217
/** Initialize m_mf_output vectors and data required to construct the buffers
198218
* \param[in] i_buffer index of buffer for which the output MultiFab is defined.
199219
* \param[in] lev level on which the output MultiFab is defined

Source/Diagnostics/Diagnostics.cpp

+13-19
Original file line numberDiff line numberDiff line change
@@ -325,10 +325,10 @@ Diagnostics::BaseReadParameters ()
325325

326326

327327
void
328-
Diagnostics::InitDataBeforeRestart ()
328+
Diagnostics::InitDataBeforeRestart (const InitDiagnosticsParameters& params)
329329
{
330330
// initialize member variables and arrays in base class::Diagnostics
331-
InitBaseData();
331+
InitBaseData(params);
332332
// initialize member variables and arrays specific to each derived class
333333
// (FullDiagnostics, BTDiagnostics, etc.)
334334
DerivedInitData();
@@ -404,15 +404,10 @@ Diagnostics::InitDataAfterRestart ()
404404

405405

406406
void
407-
Diagnostics::InitData ()
407+
Diagnostics::InitData (const InitDiagnosticsParameters& params)
408408
{
409-
auto& warpx = WarpX::GetInstance();
410-
411-
// Get current finest level available
412-
const int finest_level = warpx.finestLevel();
413-
414409
// initialize member variables and arrays in base class::Diagnostics
415-
InitBaseData();
410+
InitBaseData(params);
416411
// initialize member variables and arrays specific to each derived class
417412
// (FullDiagnostics, BTDiagnostics, etc.)
418413
DerivedInitData();
@@ -421,7 +416,7 @@ Diagnostics::InitData ()
421416
// This includes full diagnostics and BTD as well as cell-center functors for BTD.
422417
// Note that the cell-centered data for BTD is computed for all levels and hence
423418
// the corresponding functor is also initialized for all the levels
424-
for (int lev = 0; lev <= finest_level; ++lev) {
419+
for (int lev = 0; lev <= params.finest_level; ++lev) {
425420
// allocate and initialize m_all_field_functors depending on diag type
426421
InitializeFieldFunctors(lev);
427422
}
@@ -484,24 +479,23 @@ Diagnostics::InitData ()
484479

485480

486481
void
487-
Diagnostics::InitBaseData ()
482+
Diagnostics::InitBaseData (const InitDiagnosticsParameters& params)
488483
{
489-
auto & warpx = WarpX::GetInstance();
490484
// Number of levels in the simulation at the current timestep
491-
nlev = warpx.finestLevel() + 1;
485+
nlev = params.finest_level + 1;
492486
// default number of levels to be output = nlev
493487
nlev_output = nlev;
494488
// Maximum number of levels that will be allocated in the simulation
495-
nmax_lev = warpx.maxLevel() + 1;
489+
nmax_lev = params.max_level + 1;
496490
m_all_field_functors.resize( nmax_lev );
497491

498492
// For restart, move the m_lo and m_hi of the diag consistent with the
499493
// current moving_window location
500-
if (WarpX::do_moving_window) {
501-
const int moving_dir = WarpX::moving_window_dir;
502-
const int shift_num_base = static_cast<int>((warpx.getmoving_window_x() - m_lo[moving_dir]) / warpx.Geom(0).CellSize(moving_dir) );
503-
m_lo[moving_dir] += shift_num_base * warpx.Geom(0).CellSize(moving_dir);
504-
m_hi[moving_dir] += shift_num_base * warpx.Geom(0).CellSize(moving_dir);
494+
if (params.do_moving_window) {
495+
const int moving_dir = params.moving_window_dir;
496+
const int shift_num_base = static_cast<int>((params.moving_window_x - m_lo[moving_dir]) / params.cell_size_lev0_mwdir);
497+
m_lo[moving_dir] += shift_num_base * params.cell_size_lev0_mwdir;
498+
m_hi[moving_dir] += shift_num_base * params.cell_size_lev0_mwdir;
505499
}
506500
// Construct Flush class.
507501
if (m_format == "plotfile"){

Source/Diagnostics/MultiDiagnostics.H

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public:
2222
/** \brief Read Input parameters. Called in constructor. */
2323
void ReadParameters ();
2424
/** \brief Loop over diags in alldiags and call their InitDiags */
25-
void InitData ();
25+
void InitData (const InitDiagnosticsParameters& params);
2626
/** Check if any diagnostics will do compute and pack. */
2727
bool DoComputeAndPack (int step, bool force_flush=false);
2828
/** \brief Called at each iteration. Compute diags and flush. */

Source/Diagnostics/MultiDiagnostics.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ MultiDiagnostics::MultiDiagnostics ()
3434
}
3535

3636
void
37-
MultiDiagnostics::InitData ()
37+
MultiDiagnostics::InitData (const InitDiagnosticsParameters& params)
3838
{
3939
for( auto& diag : alldiags ){
40-
diag->InitData();
40+
diag->InitData(params);
4141
}
4242
}
4343

Source/Diagnostics/WarpXIO.cpp

+10-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "Utils/TextMsg.H"
1919
#include "Utils/WarpXProfilerWrapper.H"
2020
#include "WarpX.H"
21+
#include "Diagnostics.H"
2122
#include "Diagnostics/MultiDiagnostics.H"
2223
#include "Diagnostics/ReducedDiags/MultiReducedDiags.H"
2324

@@ -229,13 +230,19 @@ WarpX::InitFromCheckpoint ()
229230
is >> time_of_last_gal_shift;
230231
ablastr::utils::text::goto_next_line(is);
231232

233+
// Parameters used to initialize diagnostics
234+
const auto init_diag_params = InitDiagnosticsParameters {
235+
finestLevel(), maxLevel(),
236+
do_moving_window, moving_window_dir,
237+
moving_window_x, Geom(0).CellSize(moving_window_dir)};
238+
232239
for (int idiag = 0; idiag < multi_diags->GetTotalDiags(); ++idiag)
233240
{
234241
if( multi_diags->diagstypes(idiag) == DiagTypes::BackTransformed )
235242
{
236243
auto& diag = multi_diags->GetDiag(idiag);
237244
if (diag.getnumbuffers() > 0) {
238-
diag.InitDataBeforeRestart();
245+
diag.InitDataBeforeRestart(init_diag_params);
239246
for (int i_buffer=0; i_buffer<diag.getnumbuffers(); ++i_buffer){
240247
amrex::Real tlab;
241248
is >> tlab;
@@ -270,10 +277,10 @@ WarpX::InitFromCheckpoint ()
270277
}
271278
diag.InitDataAfterRestart();
272279
} else {
273-
diag.InitData();
280+
diag.InitData(init_diag_params);
274281
}
275282
} else {
276-
multi_diags->GetDiag(idiag).InitData();
283+
multi_diags->GetDiag(idiag).InitData(init_diag_params);
277284
}
278285
}
279286
}

Source/Initialization/WarpXInitData.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,14 @@ WarpX::AddExternalFields (int const lev)
699699

700700
void
701701
WarpX::InitDiagnostics () {
702-
multi_diags->InitData();
702+
703+
// Parameters used to initialize diagnostics
704+
const auto init_diag_params = InitDiagnosticsParameters {
705+
finestLevel(), maxLevel(),
706+
do_moving_window, moving_window_dir,
707+
moving_window_x, Geom(0).CellSize(moving_window_dir)};
708+
709+
multi_diags->InitData(init_diag_params);
703710
reduced_diags->InitData();
704711
}
705712

0 commit comments

Comments
 (0)