ImpactX
ImpactX.H
Go to the documentation of this file.
1 /* Copyright 2022 The Regents of the University of California, through Lawrence
2  * Berkeley National Laboratory (subject to receipt of any required
3  * approvals from the U.S. Dept. of Energy). All rights reserved.
4  *
5  * This file is part of ImpactX.
6  *
7  * Authors: Axel Huebl, Chad Mitchell, Ji Qiang
8  * License: BSD-3-Clause-LBNL
9  */
10 #ifndef IMPACT_X_H
11 #define IMPACT_X_H
12 
14 #include "particles/elements/All.H"
16 
17 #include <AMReX_AmrCore.H>
18 #include <AMReX_MultiFab.H>
19 
20 #include <list>
21 #include <memory>
22 #include <unordered_map>
23 
24 
25 namespace impactx
26 {
31  class ImpactX final
32  : public amrex::AmrCore
33  {
34  public:
37  ImpactX ();
38 
39  ~ImpactX () = default;
40 
41  // removed constructors/assignments
42  ImpactX (ImpactX const&) = delete;
43  ImpactX (ImpactX &&) = delete;
44  void operator= (ImpactX const&) = delete;
45  void operator= (ImpactX &&) = delete;
46 
52  void initGrids ();
53 
60 
67 
78  void
80  amrex::ParticleReal bunch_charge,
82  int npart
83  );
84 
87  void validate ();
88 
93  bool early_param_check ();
94 
97  void evolve ();
98 
103  void init_warning_logger ();
104 
105  private:
107  void ErrorEst (int lev, amrex::TagBoxArray& tags, amrex::Real time,
108  int ngrow) override;
109 
112  void MakeNewLevelFromScratch (int lev, amrex::Real time, const amrex::BoxArray& ba,
113  const amrex::DistributionMapping& dm) override;
114 
116  // with interpolated coarse level data.
117  void MakeNewLevelFromCoarse (int lev, amrex::Real time, const amrex::BoxArray& ba,
118  const amrex::DistributionMapping& dm) override;
119 
121  // and fill with existing fine and coarse data.
122  void RemakeLevel (int lev, amrex::Real time, const amrex::BoxArray& ba,
123  const amrex::DistributionMapping& dm) override;
124 
126  void ClearLevel (int lev) override;
127 
128  public:
134  void ResizeMesh ();
135 
137  std::unique_ptr<ImpactXParticleContainer> m_particle_container;
138 
140  std::unordered_map<int, amrex::MultiFab> m_rho;
142  std::unordered_map<int, amrex::MultiFab> m_phi;
144  std::unordered_map<int, std::unordered_map<std::string, amrex::MultiFab> > m_space_charge_field;
145 
147  std::list<KnownElements> m_lattice;
148  };
149 
150 } // namespace impactx
151 
152 #endif // IMPACT_X_H
void operator=(ImpactX const &)=delete
std::unordered_map< int, std::unordered_map< std::string, amrex::MultiFab > > m_space_charge_field
Definition: ImpactX.H:144
std::unique_ptr< ImpactXParticleContainer > m_particle_container
Definition: ImpactX.H:137
ImpactX()
Definition: ImpactX.cpp:33
Definition: ImpactX.cpp:31
void ErrorEst(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow) override
Tag cells for refinement. TagBoxArray tags is built on level lev grids.
Definition: InitMeshRefinement.cpp:33
void validate()
Definition: Validate.cpp:21
std::list< KnownElements > m_lattice
Definition: ImpactX.H:147
void init_warning_logger()
Definition: Warnings.cpp:24
void MakeNewLevelFromCoarse(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Make a new level using provided BoxArray and DistributionMapping and fill.
Definition: InitMeshRefinement.cpp:107
void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Definition: InitMeshRefinement.cpp:43
void evolve()
Definition: ImpactX.cpp:62
void ClearLevel(int lev) override
Delete level data.
Definition: InitMeshRefinement.cpp:128
void initGrids()
Definition: ImpactX.cpp:46
void initBeamDistributionFromInputs()
Definition: InitDistribution.cpp:106
std::unordered_map< int, amrex::MultiFab > m_phi
Definition: ImpactX.H:142
void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Remake an existing level using provided BoxArray and DistributionMapping.
Definition: InitMeshRefinement.cpp:119
void add_particles(amrex::ParticleReal bunch_charge, distribution::KnownDistributions distr, int npart)
Definition: InitDistribution.cpp:29
Definition: ImpactX.H:31
~ImpactX()=default
bool early_param_check()
Definition: Warnings.cpp:55
void initLatticeElementsFromInputs()
Definition: InitElement.cpp:25
void ResizeMesh()
Definition: InitMeshRefinement.cpp:135
std::unordered_map< int, amrex::MultiFab > m_rho
Definition: ImpactX.H:140
std::variant< None, Gaussian, Kurth4D, Kurth6D, KVdist, Semigaussian, Waterbag > KnownDistributions
Definition: All.H:30