WarpX
Loading...
Searching...
No Matches
RigidInjectedParticleContainer.H
Go to the documentation of this file.
1/* Copyright 2019 Andrew Myers, David Grote, Maxence Thevenet
2 * Weiqun Zhang
3 *
4 * This file is part of WarpX.
5 *
6 * License: BSD-3-Clause-LBNL
7 */
8#ifndef WARPX_RigidInjectedParticleContainer_H_
9#define WARPX_RigidInjectedParticleContainer_H_
10
13
16
17#include <AMReX_Enum.H>
18#include <AMReX_REAL.H>
19#include <AMReX_Vector.H>
20
21#include <AMReX_BaseFwd.H>
22#include <AMReX_AmrCoreFwd.H>
23
24#include <iosfwd>
25#include <string>
26
28
49{
50public:
52 int ispecies,
53 const std::string& name);
54 ~RigidInjectedParticleContainer () override = default;
55
60
61
62 void InitData() override;
63
64 virtual void RemapParticles();
65
67 int lev,
68 const std::string& current_fp_string,
69 amrex::Real t,
70 amrex::Real dt,
72 bool skip_deposition=false,
73 ImplicitOptions const * implicit_options = nullptr) override;
74
75 void PushPX (WarpXParIter& pti,
76 amrex::FArrayBox const * exfab,
77 amrex::FArrayBox const * eyfab,
78 amrex::FArrayBox const * ezfab,
79 amrex::FArrayBox const * bxfab,
80 amrex::FArrayBox const * byfab,
81 amrex::FArrayBox const * bzfab,
82 amrex::IntVect ngEB, int /*e_is_nodal*/,
83 long offset,
84 long np_to_push,
85 int lev, int gather_lev,
86 amrex::Real dt, ScaleFields scaleFields,
87 SubcyclingHalf subcycling_half=SubcyclingHalf::None) override;
88
89 void PushP (int lev, amrex::Real dt,
90 const amrex::MultiFab& Ex,
91 const amrex::MultiFab& Ey,
92 const amrex::MultiFab& Ez,
93 const amrex::MultiFab& Bx,
94 const amrex::MultiFab& By,
95 const amrex::MultiFab& Bz) override;
96
97 void ReadHeader (std::istream& is) override;
98
99 void WriteHeader (std::ostream& os) const override;
100
101private:
102
103 // User input quantities
104 amrex::ParticleReal zinject_plane = 0.;
106
107 amrex::ParticleReal vzbeam_ave_boosted;
108
110
111 // Temporary quantities
112 amrex::ParticleReal zinject_plane_lev;
113 amrex::ParticleReal zinject_plane_lev_previous;
115
116};
117
118#endif
#define AMREX_ENUM(CLASS,...)
Array4< int const > offset
RigidAdvanceMode
Definition RigidInjectedParticleContainer.H:27
@ vz
Definition RigidInjectedParticleContainer.H:27
@ v
Definition RigidInjectedParticleContainer.H:27
@ vzbar
Definition RigidInjectedParticleContainer.H:27
SubcyclingHalf
Subcycling half selector.
Definition WarpXAlgorithmSelection.H:166
@ None
Definition WarpXAlgorithmSelection.H:166
PhysicalParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition PhysicalParticleContainer.cpp:119
void WriteHeader(std::ostream &os) const override
Definition ParticleIO.cpp:99
void InitData() override
Definition RigidInjectedParticleContainer.cpp:85
amrex::ParticleReal zinject_plane_lev_previous
Definition RigidInjectedParticleContainer.H:113
amrex::Vector< amrex::ParticleReal > zinject_plane_levels
Definition RigidInjectedParticleContainer.H:109
virtual void RemapParticles()
Definition RigidInjectedParticleContainer.cpp:102
RigidInjectedParticleContainer & operator=(RigidInjectedParticleContainer const &)=delete
void PushPX(WarpXParIter &pti, amrex::FArrayBox const *exfab, amrex::FArrayBox const *eyfab, amrex::FArrayBox const *ezfab, amrex::FArrayBox const *bxfab, amrex::FArrayBox const *byfab, amrex::FArrayBox const *bzfab, amrex::IntVect ngEB, int, long offset, long np_to_push, int lev, int gather_lev, amrex::Real dt, ScaleFields scaleFields, SubcyclingHalf subcycling_half=SubcyclingHalf::None) override
Definition RigidInjectedParticleContainer.cpp:171
RigidAdvanceMode rigid_advance_mode
Definition RigidInjectedParticleContainer.H:105
bool done_injecting_lev
Definition RigidInjectedParticleContainer.H:114
amrex::ParticleReal zinject_plane
Definition RigidInjectedParticleContainer.H:104
void PushP(int lev, amrex::Real dt, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz) override
Definition RigidInjectedParticleContainer.cpp:302
~RigidInjectedParticleContainer() override=default
void ReadHeader(std::istream &is) override
Definition ParticleIO.cpp:75
void Evolve(ablastr::fields::MultiFabRegister &fields, int lev, const std::string &current_fp_string, amrex::Real t, amrex::Real dt, SubcyclingHalf subcycling_half=SubcyclingHalf::None, bool skip_deposition=false, ImplicitOptions const *implicit_options=nullptr) override
Evolve is the central function in PhysicalParticleContainer that advances plasma particles for a time...
Definition RigidInjectedParticleContainer.cpp:269
amrex::ParticleReal vzbeam_ave_boosted
Definition RigidInjectedParticleContainer.H:107
RigidInjectedParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition RigidInjectedParticleContainer.cpp:59
RigidInjectedParticleContainer(RigidInjectedParticleContainer &&)=default
amrex::ParticleReal zinject_plane_lev
Definition RigidInjectedParticleContainer.H:112
RigidInjectedParticleContainer(RigidInjectedParticleContainer const &)=delete
Definition WarpXParticleContainer.H:117
Definition EffectivePotentialPoissonSolver.H:63
IntVectND< 3 > IntVect
Definition ImplicitOptions.H:7
Functor that scales E and B by a factor before pushing the particles. This is used for rigid injectio...
Definition ScaleFields.H:14
Definition MultiFabRegister.H:262