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,
75 ImplicitOptions const * implicit_options = nullptr) override;
76
77 void PushPX (WarpXParIter& pti,
78 amrex::FArrayBox const * exfab,
79 amrex::FArrayBox const * eyfab,
80 amrex::FArrayBox const * ezfab,
81 amrex::FArrayBox const * bxfab,
82 amrex::FArrayBox const * byfab,
83 amrex::FArrayBox const * bzfab,
84 amrex::IntVect ngEB, int /*e_is_nodal*/,
85 long offset,
86 long np_to_push,
87 int lev, int gather_lev,
88 amrex::Real dt, ScaleFields scaleFields,
91 MomentumPushType momentum_push_type=MomentumPushType::Full) override;
92
93 void PushP (int lev, amrex::Real dt,
94 const amrex::MultiFab& Ex,
95 const amrex::MultiFab& Ey,
96 const amrex::MultiFab& Ez,
97 const amrex::MultiFab& Bx,
98 const amrex::MultiFab& By,
99 const amrex::MultiFab& Bz) override;
100
101 void ReadHeader (std::istream& is) override;
102
103 void WriteHeader (std::ostream& os) const override;
104
105private:
106
107 // User input quantities
108 amrex::ParticleReal zinject_plane = 0.;
110
111 amrex::ParticleReal vzbeam_ave_boosted;
112
114
115 // Temporary quantities
116 amrex::ParticleReal zinject_plane_lev;
117 amrex::ParticleReal zinject_plane_lev_previous;
119
120};
121
122#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
PositionPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:181
@ Full
Definition WarpXAlgorithmSelection.H:181
MomentumPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:189
@ Full
Definition WarpXAlgorithmSelection.H:189
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:117
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, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full) override
Gather fields and push particles in one fused kernel.
Definition RigidInjectedParticleContainer.cpp:171
amrex::Vector< amrex::ParticleReal > zinject_plane_levels
Definition RigidInjectedParticleContainer.H:113
virtual void RemapParticles()
Definition RigidInjectedParticleContainer.cpp:102
RigidInjectedParticleContainer & operator=(RigidInjectedParticleContainer const &)=delete
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, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full, ImplicitOptions const *implicit_options=nullptr) override
Evolve is the central function in PhysicalParticleContainer that advances plasma particles for a time...
Definition RigidInjectedParticleContainer.cpp:277
RigidAdvanceMode rigid_advance_mode
Definition RigidInjectedParticleContainer.H:109
bool done_injecting_lev
Definition RigidInjectedParticleContainer.H:118
amrex::ParticleReal zinject_plane
Definition RigidInjectedParticleContainer.H:108
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:315
~RigidInjectedParticleContainer() override=default
void ReadHeader(std::istream &is) override
Definition ParticleIO.cpp:75
amrex::ParticleReal vzbeam_ave_boosted
Definition RigidInjectedParticleContainer.H:111
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:116
RigidInjectedParticleContainer(RigidInjectedParticleContainer const &)=delete
Definition WarpXParticleContainer.H:112
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