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);
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 cur_time);
108 
120  void DepositCurrent (int lev,
122 
132  void DepositCharge (int lev, amrex::MultiFab &rho, int icomp = 0);
133 
134  amrex::Real getCharge () const {return charge;}
135  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 
178  // Keep a pointer to TemperatureProperties to ensure the lifetime of the
179  // contained Parser
180  std::unique_ptr<TemperatureProperties> h_mom_temp;
181  std::unique_ptr<VelocityProperties> h_mom_vel;
182 
183 public:
184 
185  // MultiFabs that contain the density (N) and momentum density (NU) of this fluid species, for each refinement level
188 
189 };
190 
191 #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 > 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:181
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
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:187
amrex::ParserExecutor< 4 > m_Exfield_parser
Definition: WarpXFluidContainer.H:164
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:186
std::unique_ptr< amrex::Parser > ux_parser
Definition: WarpXFluidContainer.H:174
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 cur_time)
Lorentz Momentum Source.
Definition: WarpXFluidContainer.cpp:944
void centrifugal_source_rz(int lev)
Centrifugal source term.
Definition: WarpXFluidContainer.cpp:876
amrex::Real mass
Definition: WarpXFluidContainer.H:141
~WarpXFluidContainer()
Definition: WarpXFluidContainer.H:34
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:1196
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:1232
WarpXFluidContainer & operator=(WarpXFluidContainer &&)=default
std::unique_ptr< TemperatureProperties > h_mom_temp
Definition: WarpXFluidContainer.H:180
name
Definition: run_automated.py:229
Definition: InjectorDensity.H:127
Definition: InjectorMomentum.H:514