WarpX
WarpXFluidContainer.H
Go to the documentation of this file.
1 /* Copyright 2023 Grant Johnson, Remi Lehe
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 #ifndef WARPX_WarpXFluidContainer_H_
8 #define WARPX_WarpXFluidContainer_H_
9 
10 #include "Evolve/WarpXDtType.H"
12 #include "MultiFluidContainer.H"
13 
14 #include<AMReX_MultiFab.H>
15 #include<AMReX_Vector.H>
16 
17 #include <string>
18 
19 
29 {
30 public:
32 
33  WarpXFluidContainer (int nlevs_max, int ispecies, const std::string& name);
34  ~WarpXFluidContainer() = default;
35 
40 
41  void AllocateLevelMFs (int lev, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm);
42 
43  void InitData (int lev, amrex::Box init_box, amrex::Real cur_time);
44 
45  void ReadParameters ();
46 
50  void Evolve (int lev,
51  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
52  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz,
54  amrex::Real cur_time, bool skip_deposition=false);
55 
64  void AdvectivePush_Muscl (int lev);
65 
66 
75  void ApplyBcFluidsAndComms (int lev);
76 
77 #if defined(WARPX_DIM_RZ)
86  void centrifugal_source_rz (int lev);
87 #endif
88 
104  void GatherAndPush (int lev,
105  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
106  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz,
107  amrex::Real t);
108 
120  void DepositCurrent (int lev,
122 
132  void DepositCharge (int lev, amrex::MultiFab &rho, int icomp = 0);
133 
134  [[nodiscard]] amrex::Real getCharge () const {return charge;}
135  [[nodiscard]] amrex::Real getMass () const {return mass;}
136 
137 protected:
139  std::string species_name;
140  amrex::Real charge;
141  amrex::Real mass;
142 
143  int do_not_push = 0;
144  int do_not_gather = 0;
145  int do_not_deposit = 0;
147 
148  // Parser for external fields
149  std::string m_B_ext_s = "none";
150  std::string m_E_ext_s = "none";
151 
152  // Parser for B_external on the particle
153  std::unique_ptr<amrex::Parser> m_Bx_parser;
154  std::unique_ptr<amrex::Parser> m_By_parser;
155  std::unique_ptr<amrex::Parser> m_Bz_parser;
159 
160  // Parser for E_external on the particle
161  std::unique_ptr<amrex::Parser> m_Ex_parser;
162  std::unique_ptr<amrex::Parser> m_Ey_parser;
163  std::unique_ptr<amrex::Parser> m_Ez_parser;
167 
168  std::unique_ptr<InjectorDensity,InjectorDensityDeleter> h_inj_rho;
170  std::unique_ptr<amrex::Parser> density_parser;
171 
172  std::unique_ptr<InjectorMomentum,InjectorMomentumDeleter> h_inj_mom;
174  std::unique_ptr<amrex::Parser> ux_parser;
175  std::unique_ptr<amrex::Parser> uy_parser;
176  std::unique_ptr<amrex::Parser> uz_parser;
177  std::unique_ptr<amrex::Parser> ux_th_parser;
178  std::unique_ptr<amrex::Parser> uy_th_parser;
179  std::unique_ptr<amrex::Parser> uz_th_parser;
180 
181  // Keep a pointer to TemperatureProperties to ensure the lifetime of the
182  // contained Parser
183  std::unique_ptr<TemperatureProperties> h_mom_temp;
184  std::unique_ptr<VelocityProperties> h_mom_vel;
185 
186 public:
187 
188  // MultiFabs that contain the density (N) and momentum density (NU) of this fluid species, for each refinement level
191 
192 };
193 
194 #endif
PhysicalSpecies
Definition: SpeciesPhysicalProperties.H:16
Definition: WarpXFluidContainer.H:29
std::string species_name
Definition: WarpXFluidContainer.H:139
int do_not_deposit
Definition: WarpXFluidContainer.H:145
WarpXFluidContainer(WarpXFluidContainer &&)=default
void AdvectivePush_Muscl(int lev)
Advective term, cold-rel. fluids.
Definition: WarpXFluidContainer.cpp:405
WarpXFluidContainer & operator=(WarpXFluidContainer const &)=delete
friend MultiFluidContainer
Definition: WarpXFluidContainer.H:31
std::string m_B_ext_s
Definition: WarpXFluidContainer.H:149
void Evolve(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz, amrex::MultiFab *rho, amrex::MultiFab &jx, amrex::MultiFab &jy, amrex::MultiFab &jz, amrex::Real cur_time, bool skip_deposition=false)
Definition: WarpXFluidContainer.cpp:255
std::unique_ptr< InjectorMomentum, InjectorMomentumDeleter > h_inj_mom
Definition: WarpXFluidContainer.H:172
std::unique_ptr< amrex::Parser > m_Ey_parser
Definition: WarpXFluidContainer.H:162
std::unique_ptr< amrex::Parser > ux_th_parser
Definition: WarpXFluidContainer.H:177
void GatherAndPush(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz, amrex::Real t)
Lorentz Momentum Source.
Definition: WarpXFluidContainer.cpp:949
std::unique_ptr< amrex::Parser > density_parser
Definition: WarpXFluidContainer.H:170
std::unique_ptr< InjectorDensity, InjectorDensityDeleter > h_inj_rho
Definition: WarpXFluidContainer.H:168
std::unique_ptr< amrex::Parser > uy_parser
Definition: WarpXFluidContainer.H:175
amrex::Real charge
Definition: WarpXFluidContainer.H:140
PhysicalSpecies physical_species
Definition: WarpXFluidContainer.H:146
void InitData(int lev, amrex::Box init_box, amrex::Real cur_time)
Definition: WarpXFluidContainer.cpp:165
std::unique_ptr< VelocityProperties > h_mom_vel
Definition: WarpXFluidContainer.H:184
void ApplyBcFluidsAndComms(int lev)
Apply non-periodic BC to fluids and communicate boundaries.
Definition: WarpXFluidContainer.cpp:302
std::unique_ptr< amrex::Parser > m_Ez_parser
Definition: WarpXFluidContainer.H:163
std::string m_E_ext_s
Definition: WarpXFluidContainer.H:150
InjectorDensity * d_inj_rho
Definition: WarpXFluidContainer.H:169
int do_not_push
Definition: WarpXFluidContainer.H:143
std::unique_ptr< amrex::Parser > m_Ex_parser
Definition: WarpXFluidContainer.H:161
~WarpXFluidContainer()=default
std::unique_ptr< amrex::Parser > uz_parser
Definition: WarpXFluidContainer.H:176
int do_not_gather
Definition: WarpXFluidContainer.H:144
amrex::ParserExecutor< 4 > m_Bzfield_parser
Definition: WarpXFluidContainer.H:158
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > NU
Definition: WarpXFluidContainer.H:190
amrex::ParserExecutor< 4 > m_Exfield_parser
Definition: WarpXFluidContainer.H:164
std::unique_ptr< amrex::Parser > uy_th_parser
Definition: WarpXFluidContainer.H:178
WarpXFluidContainer(int nlevs_max, int ispecies, const std::string &name)
Definition: WarpXFluidContainer.cpp:22
void ReadParameters()
Definition: WarpXFluidContainer.cpp:58
amrex::Real getMass() const
Definition: WarpXFluidContainer.H:135
amrex::Vector< std::unique_ptr< amrex::MultiFab > > N
Definition: WarpXFluidContainer.H:189
std::unique_ptr< amrex::Parser > ux_parser
Definition: WarpXFluidContainer.H:174
std::unique_ptr< amrex::Parser > uz_th_parser
Definition: WarpXFluidContainer.H:179
void centrifugal_source_rz(int lev)
Centrifugal source term.
Definition: WarpXFluidContainer.cpp:881
amrex::Real mass
Definition: WarpXFluidContainer.H:141
void AllocateLevelMFs(int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm)
Definition: WarpXFluidContainer.cpp:142
std::unique_ptr< amrex::Parser > m_Bx_parser
Definition: WarpXFluidContainer.H:153
InjectorMomentum * d_inj_mom
Definition: WarpXFluidContainer.H:173
amrex::Real getCharge() const
Definition: WarpXFluidContainer.H:134
amrex::ParserExecutor< 4 > m_Eyfield_parser
Definition: WarpXFluidContainer.H:165
amrex::ParserExecutor< 4 > m_Ezfield_parser
Definition: WarpXFluidContainer.H:166
int species_id
Definition: WarpXFluidContainer.H:138
amrex::ParserExecutor< 4 > m_Bxfield_parser
Definition: WarpXFluidContainer.H:156
amrex::ParserExecutor< 4 > m_Byfield_parser
Definition: WarpXFluidContainer.H:157
std::unique_ptr< amrex::Parser > m_Bz_parser
Definition: WarpXFluidContainer.H:155
WarpXFluidContainer(WarpXFluidContainer const &)=delete
void DepositCharge(int lev, amrex::MultiFab &rho, int icomp=0)
Deposit fluid charge density.
Definition: WarpXFluidContainer.cpp:1201
std::unique_ptr< amrex::Parser > m_By_parser
Definition: WarpXFluidContainer.H:154
void DepositCurrent(int lev, amrex::MultiFab &jx, amrex::MultiFab &jy, amrex::MultiFab &jz)
Deposit fluid current density.
Definition: WarpXFluidContainer.cpp:1237
WarpXFluidContainer & operator=(WarpXFluidContainer &&)=default
std::unique_ptr< TemperatureProperties > h_mom_temp
Definition: WarpXFluidContainer.H:183
name
Definition: run_automated.py:229
Definition: InjectorDensity.H:130
Definition: InjectorMomentum.H:505