WarpX
Loading...
Searching...
No Matches
PhotonParticleContainer.H
Go to the documentation of this file.
1/* Copyright 2019 Andrew Myers, David Grote, Luca Fedeli
2 * Maxence Thevenet, Weiqun Zhang
3 *
4 * This file is part of WarpX.
5 *
6 * License: BSD-3-Clause-LBNL
7 */
8#ifndef WARPX_PhotonParticleContainer_H_
9#define WARPX_PhotonParticleContainer_H_
10
13
16
17#include <AMReX_Particles.H>
18#include <AMReX_REAL.H>
19
20#include <AMReX_BaseFwd.H>
21#include <AMReX_AmrCoreFwd.H>
22
23#include <string>
24
34{
35public:
37 int ispecies,
38 const std::string& name);
39 ~PhotonParticleContainer () override = default;
40
45
46 void InitData() override;
47
49 int lev,
50 const std::string& current_fp_string,
52 amrex::Real dt,
54 bool skip_deposition=false,
57 ImplicitOptions const * implicit_options = nullptr) override;
58
59 void PushPX (WarpXParIter& pti,
60 amrex::FArrayBox const * exfab,
61 amrex::FArrayBox const * eyfab,
62 amrex::FArrayBox const * ezfab,
63 amrex::FArrayBox const * bxfab,
64 amrex::FArrayBox const * byfab,
65 amrex::FArrayBox const * bzfab,
66 amrex::IntVect ngEB, int /*e_is_nodal*/,
67 long offset,
68 long np_to_push,
69 int lev, int gather_lev,
70 amrex::Real dt, ScaleFields scaleFields,
71 SubcyclingHalf subcycling_half,
73 MomentumPushType momentum_push_type=MomentumPushType::Full) override;
74
80 int lev, amrex::Real t, amrex::Real dt) override;
81
82 // Do nothing
83 void PushP (int /*lev*/,
84 amrex::Real /*dt*/,
85 const amrex::MultiFab& /*Ex*/,
86 const amrex::MultiFab& /*Ey*/,
87 const amrex::MultiFab& /*Ez*/,
88 const amrex::MultiFab& /*Bx*/,
89 const amrex::MultiFab& /*By*/,
90 const amrex::MultiFab& /*Bz*/,
91 MomentumPushType /*momentum_push_type*/) override {}
92
93 // DepositCharge should do nothing for photons
95 RealVector const & /*wp*/,
96 const int * const /*ion_lev*/,
97 amrex::MultiFab* /*rho*/,
98 int /*icomp*/,
99 const long /*offset*/,
100 const long /*np_to_deposit*/,
101 int /*thread_num*/,
102 int /*lev*/,
103 int /*depos_lev*/) override {}
104
105 // DepositCurrent should do nothing for photons
107 RealVector const & /*wp*/,
108 RealVector const & /*uxp*/,
109 RealVector const & /*uyp*/,
110 RealVector const & /*uzp*/,
111 int const * const /*ion_lev*/,
112 amrex::MultiFab * const /*jx*/,
113 amrex::MultiFab * const /*jy*/,
114 amrex::MultiFab * const /*jz*/,
115 long const /*offset*/,
116 long const /*np_to_deposit*/,
117 int const /*thread_num*/,
118 int const /*lev*/,
119 int const /*depos_lev*/,
120 amrex::Real const /*dt*/,
121 amrex::Real const /*relative_time*/,
122 PushType /*push_type*/) override {}
123
131 int /*lev*/,
132 amrex::Real /*dt*/) override {}
133};
134
135#endif // #ifndef WARPX_PhotonParticleContainer_H_
Array4< int const > offset
PushType
Particle push scheme.
Definition WarpXAlgorithmSelection.H:170
PositionPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:180
@ Full
Definition WarpXAlgorithmSelection.H:180
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
void PushP(int, amrex::Real, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, const amrex::MultiFab &, MomentumPushType) override
Definition PhotonParticleContainer.H:83
PhotonParticleContainer(PhotonParticleContainer const &)=delete
PhotonParticleContainer(PhotonParticleContainer &&)=default
void DepositCharge(WarpXParIter &, RealVector const &, const int *const, amrex::MultiFab *, int, const long, const long, int, int, int) override
Definition PhotonParticleContainer.H:94
void DepositCurrent(WarpXParIter &, RealVector const &, RealVector const &, RealVector const &, RealVector const &, int const *const, amrex::MultiFab *const, amrex::MultiFab *const, amrex::MultiFab *const, long const, long const, int const, int const, int const, amrex::Real const, amrex::Real const, PushType) override
Definition PhotonParticleContainer.H:106
PhotonParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition PhotonParticleContainer.cpp:46
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, PositionPushType position_push_type=PositionPushType::Full, MomentumPushType momentum_push_type=MomentumPushType::Full) override
Gather fields and push particles in one fused kernel.
Definition PhotonParticleContainer.cpp:83
~PhotonParticleContainer() override=default
void FinishImplicitParticleUpdate(ablastr::fields::MultiFabRegister &fields, int lev, amrex::Real t, amrex::Real dt) override
Advances photon position at the end of an implicit time step.
Definition PhotonParticleContainer.cpp:275
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
Pure virtual function to advance particles (typically by one time step).
Definition PhotonParticleContainer.cpp:250
void InitData() override
Definition PhotonParticleContainer.cpp:74
PhotonParticleContainer & operator=(PhotonParticleContainer const &)=delete
void DepositMassMatrices(ablastr::fields::MultiFabRegister &, int, amrex::Real) override
No-op override: photons are massless and carry no charge, so they do not contribute to the implicit-s...
Definition PhotonParticleContainer.H:130
PhysicalParticleContainer(amrex::AmrCore *amr_core, int ispecies, const std::string &name)
Definition PhysicalParticleContainer.cpp:119
Definition WarpXParticleContainer.H:112
amrex_real Real
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:272