ImpactX
ImpactX.H
Go to the documentation of this file.
1 /* Copyright 2022-2023 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  // removed constructors/assignments
40  ImpactX (ImpactX const&) = delete;
41  ImpactX (ImpactX &&) = delete;
42  void operator= (ImpactX const&) = delete;
43  void operator= (ImpactX &&) = delete;
44 
50  void initGrids ();
51 
58 
65 
76  void
78  amrex::ParticleReal bunch_charge,
80  int npart
81  );
82 
85  void validate ();
86 
91  bool early_param_check ();
92 
95  void evolve ();
96 
101  void init_warning_logger ();
102 
103  private:
105  void ErrorEst (int lev, amrex::TagBoxArray& tags, amrex::Real time,
106  int ngrow) override;
107 
110  void MakeNewLevelFromScratch (int lev, amrex::Real time, const amrex::BoxArray& ba,
111  const amrex::DistributionMapping& dm) override;
112 
114  // with interpolated coarse level data.
115  void MakeNewLevelFromCoarse (int lev, amrex::Real time, const amrex::BoxArray& ba,
116  const amrex::DistributionMapping& dm) override;
117 
119  // and fill with existing fine and coarse data.
120  void RemakeLevel (int lev, amrex::Real time, const amrex::BoxArray& ba,
121  const amrex::DistributionMapping& dm) override;
122 
124  void ClearLevel (int lev) override;
125 
126  public:
132  void ResizeMesh ();
133 
135  std::unique_ptr<ImpactXParticleContainer> m_particle_container;
136 
138  std::unordered_map<int, amrex::MultiFab> m_rho;
140  std::unordered_map<int, amrex::MultiFab> m_phi;
142  std::unordered_map<int, std::unordered_map<std::string, amrex::MultiFab> > m_space_charge_field;
143 
145  std::list<KnownElements> m_lattice;
146  };
147 
148 } // namespace impactx
149 
150 #endif // IMPACT_X_H
Definition: ImpactX.H:33
ImpactX(ImpactX const &)=delete
void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Definition: InitMeshRefinement.cpp:43
ImpactX()
Definition: ImpactX.cpp:34
void initBeamDistributionFromInputs()
Definition: InitDistribution.cpp:106
bool early_param_check()
Definition: Warnings.cpp:56
void initLatticeElementsFromInputs()
Definition: InitElement.cpp:279
void initGrids()
Definition: ImpactX.cpp:50
void ClearLevel(int lev) override
Delete level data.
Definition: InitMeshRefinement.cpp:128
void init_warning_logger()
Definition: Warnings.cpp:24
void ResizeMesh()
Definition: InitMeshRefinement.cpp:135
std::unordered_map< int, std::unordered_map< std::string, amrex::MultiFab > > m_space_charge_field
Definition: ImpactX.H:142
void operator=(ImpactX const &)=delete
std::unique_ptr< ImpactXParticleContainer > m_particle_container
Definition: ImpactX.H:135
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 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
std::unordered_map< int, amrex::MultiFab > m_rho
Definition: ImpactX.H:138
void validate()
Definition: Validate.cpp:21
void evolve()
Definition: ImpactX.cpp:86
void add_particles(amrex::ParticleReal bunch_charge, distribution::KnownDistributions distr, int npart)
Definition: InitDistribution.cpp:29
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
ImpactX(ImpactX &&)=delete
std::unordered_map< int, amrex::MultiFab > m_phi
Definition: ImpactX.H:140
std::list< KnownElements > m_lattice
Definition: ImpactX.H:145
std::variant< None, Gaussian, Kurth4D, Kurth6D, KVdist, Triangle, Semigaussian, Waterbag > KnownDistributions
Definition: All.H:36
Definition: ImpactX.cpp:33