Hipace
MultiBeam.H
Go to the documentation of this file.
1 /* Copyright 2020-2022
2  *
3  * This file is part of HiPACE++.
4  *
5  * Authors: AlexanderSinn, MaxThevenet, Severin Diederichs
6  * License: BSD-3-Clause-LBNL
7  */
8 #ifndef MULTIBEAM_H_
9 #define MULTIBEAM_H_
10 
11 #include "BeamParticleContainer.H"
12 #include "fields/Fields.H"
13 
14 class MultiBeam
15 {
16 
17 public:
18 
21  MultiBeam ();
22 
25  ~MultiBeam () {}
26 
39  void DepositCurrentSlice (
40  Fields& fields, amrex::Vector<amrex::Geometry> const& geom, const int lev, const int step,
41  const bool do_beam_jx_jy_deposition, const bool do_beam_jz_deposition,
42  const bool do_beam_rhomjz_deposition, const int which_slice, const int which_beam_slice,
43  const bool only_highest=false);
44 
45  void shiftSlippedParticles (const int slice, amrex::Geometry const& geom);
46 
54  const Fields& fields, amrex::Vector<amrex::Geometry> const& gm, const int slice,
55  int const current_N_level);
56 
64  void InSituComputeDiags (int step, int islice,
65  int max_step, amrex::Real physical_time,
66  amrex::Real max_time);
74  void InSituWriteToFile (int step, amrex::Real time, const amrex::Geometry& geom,
75  int max_step, amrex::Real max_time);
80  amrex::Real InitData (const amrex::Geometry& geom);
81 
86 
90  const BeamParticleContainer& getBeam (int i) const {return m_all_beams[i];}
91 
93  int get_nbeams () const {return m_nbeams;}
94 
96  std::string get_name (int i) const {return m_all_beams[i].get_name();}
97 
103  void TagByLevel (const int current_N_level, amrex::Vector<amrex::Geometry> const& geom3D,
104  const int which_slice);
105 
111  void ReorderParticles (int beam_slice, int step, amrex::Geometry& slice_geom);
112 
116  bool isSalameNow (const int step);
117 
120  bool AnySpeciesSalame ();
124  void shiftBeamSlices () {
125  for (auto& beam : m_all_beams) {
126  beam.shiftBeamSlices();
127  }
128  }
129 
130 private:
131 
132  int m_nbeams {0};
135 };
136 
137 #endif // MULTIBEAM_H_
Container for particles of 1 beam species.
Definition: BeamParticleContainer.H:68
Main class handling all field data structures and operations.
Definition: Fields.H:85
Definition: MultiBeam.H:15
void TagByLevel(const int current_N_level, amrex::Vector< amrex::Geometry > const &geom3D, const int which_slice)
Store the finest level of every beam particle on which_slice in the cpu() attribute.
Definition: MultiBeam.cpp:80
bool isSalameNow(const int step)
returns if the SALAME algorithm should be used on this slice
Definition: MultiBeam.cpp:128
MultiBeam()
Definition: MultiBeam.cpp:16
void DepositCurrentSlice(Fields &fields, amrex::Vector< amrex::Geometry > const &geom, const int lev, const int step, const bool do_beam_jx_jy_deposition, const bool do_beam_jz_deposition, const bool do_beam_rhomjz_deposition, const int which_slice, const int which_beam_slice, const bool only_highest=false)
Definition: MultiBeam.cpp:42
BeamParticleContainer & getBeam(int i)
Return 1 species.
Definition: MultiBeam.H:85
amrex::Real InitData(const amrex::Geometry &geom)
Definition: MultiBeam.cpp:32
const BeamParticleContainer & getBeam(int i) const
Return 1 species.
Definition: MultiBeam.H:90
int m_nbeams
Definition: MultiBeam.H:132
void AdvanceBeamParticlesSlice(const Fields &fields, amrex::Vector< amrex::Geometry > const &gm, const int slice, int const current_N_level)
Definition: MultiBeam.cpp:70
void shiftBeamSlices()
Definition: MultiBeam.H:124
amrex::Vector< std::string > m_names
Definition: MultiBeam.H:121
void ReorderParticles(int beam_slice, int step, amrex::Geometry &slice_geom)
Reorder beam particles to speed-up push and current deposition.
Definition: MultiBeam.cpp:112
void InSituWriteToFile(int step, amrex::Real time, const amrex::Geometry &geom, int max_step, amrex::Real max_time)
Definition: MultiBeam.cpp:101
bool AnySpeciesSalame()
returns if any beam uses the SALAME algorithm
Definition: MultiBeam.cpp:119
amrex::Vector< BeamParticleContainer > m_all_beams
Definition: MultiBeam.H:122
int get_nbeams() const
Definition: MultiBeam.H:93
amrex::Vector< amrex::Long > m_n_real_particles
Definition: MultiBeam.H:134
void InSituComputeDiags(int step, int islice, int max_step, amrex::Real physical_time, amrex::Real max_time)
Definition: MultiBeam.cpp:89
void shiftSlippedParticles(const int slice, amrex::Geometry const &geom)
Definition: MultiBeam.cpp:62
std::string get_name(int i) const
Definition: MultiBeam.H:96
~MultiBeam()
Definition: MultiBeam.H:25
int i
Definition: MakeOpenBoundary.py:152
slice
Definition: MultiLaser.H:73