WarpX
Loading...
Searching...
No Matches
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
11#include "MultiFluidContainer.H"
12
13#include <AMReX_Geometry.H>
14#include <AMReX_MultiFab.H>
15#include <AMReX_Vector.H>
16#include <AMReX_REAL.H>
17
18#include <string>
19
20
30{
31public:
33
34 WarpXFluidContainer (int ispecies, const std::string &name);
36
41
42 void AllocateLevelMFs (ablastr::fields::MultiFabRegister& m_fields, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm, int lev) const;
43
44 void InitData (
45 ablastr::fields::MultiFabRegister& m_fields, amrex::Box init_box, amrex::Real cur_time, int lev,
46 const amrex::Geometry& geom_lev, amrex::Real gamma_boost, amrex::Real beta_boost);
47
48 void ReadParameters ();
49
54 int lev,
55 const std::string& current_fp_string,
56 amrex::Real cur_time,
57 bool skip_deposition=false);
58
69
70
81
82#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
93#endif
94
112 const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
113 const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz,
114 amrex::Real t, int lev);
115
129 amrex::MultiFab& jx, amrex::MultiFab& jy, amrex::MultiFab& jz, int lev);
130
142 void DepositCharge (ablastr::fields::MultiFabRegister& m_fields, amrex::MultiFab &rho, int lev, int icomp = 0);
143
144 [[nodiscard]] amrex::Real getCharge () const {return charge;}
145 [[nodiscard]] amrex::Real getMass () const {return mass;}
146
147protected:
149 std::string species_name;
150 amrex::Real charge;
151 amrex::Real mass;
152
153 int do_not_push = 0;
157
158 // Parser for external fields
159 std::string m_B_ext_s = "none";
160 std::string m_E_ext_s = "none";
161
162 // Parser for B_external on the particle
163 std::unique_ptr<amrex::Parser> m_Bx_parser;
164 std::unique_ptr<amrex::Parser> m_By_parser;
165 std::unique_ptr<amrex::Parser> m_Bz_parser;
169
170 // Parser for E_external on the particle
171 std::unique_ptr<amrex::Parser> m_Ex_parser;
172 std::unique_ptr<amrex::Parser> m_Ey_parser;
173 std::unique_ptr<amrex::Parser> m_Ez_parser;
177
178 std::unique_ptr<InjectorDensity,InjectorDensityDeleter> h_inj_rho;
180 std::unique_ptr<amrex::Parser> density_parser;
181
182 std::unique_ptr<InjectorMomentum,InjectorMomentumDeleter> h_inj_mom;
184 std::unique_ptr<amrex::Parser> ux_parser;
185 std::unique_ptr<amrex::Parser> uy_parser;
186 std::unique_ptr<amrex::Parser> uz_parser;
187 std::unique_ptr<amrex::Parser> ux_th_parser;
188 std::unique_ptr<amrex::Parser> uy_th_parser;
189 std::unique_ptr<amrex::Parser> uz_th_parser;
190
191 // Keep a pointer to TemperatureProperties to ensure the lifetime of the
192 // contained Parser
193 std::unique_ptr<TemperatureProperties> h_mom_temp;
194 std::unique_ptr<VelocityProperties> h_mom_vel;
195
196public:
197
198 // Names of Multifabs that will be added to the mfs register
199 std::string name_mf_N = "fluid_density_"+species_name;
200 std::string name_mf_NU = "fluid_momentum_density_"+species_name;
201
202};
203
204#endif
PhysicalSpecies
Definition SpeciesPhysicalProperties.H:16
void GatherAndPush(ablastr::fields::MultiFabRegister &m_fields, 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, int lev)
Lorentz Momentum Source.
Definition WarpXFluidContainer.cpp:1086
void ApplyBcFluidsAndComms(ablastr::fields::MultiFabRegister &m_fields, int lev)
Apply non-periodic BC to fluids and communicate boundaries.
Definition WarpXFluidContainer.cpp:319
std::string species_name
Definition WarpXFluidContainer.H:149
void centrifugal_source_rz(ablastr::fields::MultiFabRegister &m_fields, int lev)
Centrifugal source term.
Definition WarpXFluidContainer.cpp:1017
int do_not_deposit
Definition WarpXFluidContainer.H:155
WarpXFluidContainer(WarpXFluidContainer &&)=default
std::string name_mf_N
Definition WarpXFluidContainer.H:199
friend MultiFluidContainer
Definition WarpXFluidContainer.H:32
std::string m_B_ext_s
Definition WarpXFluidContainer.H:159
std::unique_ptr< InjectorMomentum, InjectorMomentumDeleter > h_inj_mom
Definition WarpXFluidContainer.H:182
WarpXFluidContainer & operator=(WarpXFluidContainer &&)=default
std::unique_ptr< amrex::Parser > m_Ey_parser
Definition WarpXFluidContainer.H:172
std::unique_ptr< amrex::Parser > ux_th_parser
Definition WarpXFluidContainer.H:187
std::unique_ptr< amrex::Parser > density_parser
Definition WarpXFluidContainer.H:180
std::unique_ptr< InjectorDensity, InjectorDensityDeleter > h_inj_rho
Definition WarpXFluidContainer.H:178
std::unique_ptr< amrex::Parser > uy_parser
Definition WarpXFluidContainer.H:185
std::string name_mf_NU
Definition WarpXFluidContainer.H:200
WarpXFluidContainer(int ispecies, const std::string &name)
Definition WarpXFluidContainer.cpp:25
amrex::Real charge
Definition WarpXFluidContainer.H:150
PhysicalSpecies physical_species
Definition WarpXFluidContainer.H:156
std::unique_ptr< VelocityProperties > h_mom_vel
Definition WarpXFluidContainer.H:194
std::unique_ptr< amrex::Parser > m_Ez_parser
Definition WarpXFluidContainer.H:173
std::string m_E_ext_s
Definition WarpXFluidContainer.H:160
InjectorDensity * d_inj_rho
Definition WarpXFluidContainer.H:179
int do_not_push
Definition WarpXFluidContainer.H:153
std::unique_ptr< amrex::Parser > m_Ex_parser
Definition WarpXFluidContainer.H:171
~WarpXFluidContainer()=default
std::unique_ptr< amrex::Parser > uz_parser
Definition WarpXFluidContainer.H:186
int do_not_gather
Definition WarpXFluidContainer.H:154
amrex::ParserExecutor< 4 > m_Bzfield_parser
Definition WarpXFluidContainer.H:168
WarpXFluidContainer & operator=(WarpXFluidContainer const &)=delete
void AdvectivePush_Muscl(ablastr::fields::MultiFabRegister &m_fields, int lev)
Advective term, cold-rel. fluids.
Definition WarpXFluidContainer.cpp:421
amrex::ParserExecutor< 4 > m_Exfield_parser
Definition WarpXFluidContainer.H:174
std::unique_ptr< amrex::Parser > uy_th_parser
Definition WarpXFluidContainer.H:188
void ReadParameters()
Definition WarpXFluidContainer.cpp:58
amrex::Real getMass() const
Definition WarpXFluidContainer.H:145
std::unique_ptr< amrex::Parser > ux_parser
Definition WarpXFluidContainer.H:184
std::unique_ptr< amrex::Parser > uz_th_parser
Definition WarpXFluidContainer.H:189
amrex::Real mass
Definition WarpXFluidContainer.H:151
std::unique_ptr< amrex::Parser > m_Bx_parser
Definition WarpXFluidContainer.H:163
InjectorMomentum * d_inj_mom
Definition WarpXFluidContainer.H:183
amrex::Real getCharge() const
Definition WarpXFluidContainer.H:144
amrex::ParserExecutor< 4 > m_Eyfield_parser
Definition WarpXFluidContainer.H:175
amrex::ParserExecutor< 4 > m_Ezfield_parser
Definition WarpXFluidContainer.H:176
int species_id
Definition WarpXFluidContainer.H:148
void InitData(ablastr::fields::MultiFabRegister &m_fields, amrex::Box init_box, amrex::Real cur_time, int lev, const amrex::Geometry &geom_lev, amrex::Real gamma_boost, amrex::Real beta_boost)
Definition WarpXFluidContainer.cpp:166
void AllocateLevelMFs(ablastr::fields::MultiFabRegister &m_fields, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, int lev) const
Definition WarpXFluidContainer.cpp:142
amrex::ParserExecutor< 4 > m_Bxfield_parser
Definition WarpXFluidContainer.H:166
void Evolve(ablastr::fields::MultiFabRegister &fields, int lev, const std::string &current_fp_string, amrex::Real cur_time, bool skip_deposition=false)
Definition WarpXFluidContainer.cpp:259
amrex::ParserExecutor< 4 > m_Byfield_parser
Definition WarpXFluidContainer.H:167
std::unique_ptr< amrex::Parser > m_Bz_parser
Definition WarpXFluidContainer.H:165
void DepositCharge(ablastr::fields::MultiFabRegister &m_fields, amrex::MultiFab &rho, int lev, int icomp=0)
Deposit fluid charge density.
Definition WarpXFluidContainer.cpp:1371
void DepositCurrent(ablastr::fields::MultiFabRegister &m_fields, amrex::MultiFab &jx, amrex::MultiFab &jy, amrex::MultiFab &jz, int lev)
Deposit fluid current density.
Definition WarpXFluidContainer.cpp:1407
WarpXFluidContainer(WarpXFluidContainer const &)=delete
std::unique_ptr< amrex::Parser > m_By_parser
Definition WarpXFluidContainer.H:164
std::unique_ptr< TemperatureProperties > h_mom_temp
Definition WarpXFluidContainer.H:193
BoxND< 3 > Box
Definition InjectorDensity.H:163
Definition InjectorMomentum.H:505
Definition MultiFabRegister.H:262