chombo-discharge
Loading...
Searching...
No Matches
CD_EBParticleMesh.H
Go to the documentation of this file.
1/* chombo-discharge
2 * Copyright © 2021 SINTEF Energy Research.
3 * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4 */
5
12#ifndef CD_EBParticleMesh_H
13#define CD_EBParticleMesh_H
14
15// Std includes
16#include <type_traits>
17
18// Chombo includes
19#include <EBISBox.H>
20#include <EBCellFAB.H>
21#include <Vector.H>
22#include <RealVect.H>
23
24// Our includes
25#include <CD_DepositionType.H>
26#include <CD_NamespaceHeader.H>
27
34{
35public:
40
50 const Box& a_region,
51 const EBISBox& a_ebisbox,
52 const RealVect& a_dx,
53 const RealVect& a_probLo);
54
63 void
65 const Box& a_region,
66 const EBISBox& a_ebisbox,
67 const RealVect& a_dx,
68 const RealVect& a_probLo);
69
82 template <class P, class Ret, Ret (P::*MemberFunc)() const>
83 void
85 const List<P>& a_particles,
87 const Real a_widthScale,
88 const bool a_forceIrregNGP = false) const;
89
100 template <class P, class Ret, Ret (P::*MemberFunc)()>
101 void
103 const EBCellFAB& a_meshData,
105 const bool a_forceIrregNGP = false) const;
106
111 template <typename Ret>
112 static inline constexpr int
114 {
115 using NoRef = typename std::remove_reference<Ret>::type;
116 using Base = typename std::remove_cv<NoRef>::type;
117
118 static_assert(std::is_same<Base, Real>::value || std::is_same<Base, RealVect>::value,
119 "Ret should be Real or RealVect");
120
121 return std::is_same<Base, Real>::value ? 1 : SpaceDim;
122 }
123
124protected:
129
134
139
144
149
154
163 inline void
165 const RealVect& a_position,
166 const Real& a_volumeFactor,
167 const Real* a_strength,
168 const int& a_numComp) const noexcept;
169
184 inline void
186 const RealVect& a_position,
188 const Box& a_particleBox,
189 const Real& a_volumeFactor,
190 const Real* a_strength,
191 const int& a_numComp,
192 const bool a_forceIrregNGP) const noexcept;
193
208 inline void
210 const RealVect& a_position,
212 const Box& a_particleBox,
213 const Real& a_volumeFactor,
214 const Real* a_strength,
215 const int& a_numComp,
216 const bool a_forceIrregNGP) const noexcept;
217
225 inline void
227 const EBCellFAB& a_meshData,
228 const RealVect& a_position,
229 const int& a_numComp) const noexcept;
230
241 inline void
243 const EBCellFAB& a_meshData,
244 const Box& a_validBox,
245 const Box& a_gatherBox,
246 const RealVect& a_position,
247 const int& a_numComp,
248 const bool a_forceIrregNGP) const noexcept;
249
260 inline void
262 const EBCellFAB& a_meshData,
263 const Box& a_validBox,
264 const Box& a_gatherBox,
265 const RealVect& a_position,
266 const int& a_numComp,
267 const bool a_forceIrregNGP) const noexcept;
268};
269
270#include <CD_NamespaceFooter.H>
271
273
274#endif
Declaration of deposition types.
DepositionType
Deposition types.
Definition CD_DepositionType.H:23
Implementatoin of CD_EBParticleMesh.H.
A class for depositing and interpolating particles on a single grid patch.
Definition CD_EBParticleMesh.H:34
Box m_region
Cell-centered box, i.e. valid region.
Definition CD_EBParticleMesh.H:138
bool m_verbose
Verbose or not.
Definition CD_EBParticleMesh.H:133
void depositParticleCIC(EBCellFAB &a_rho, const RealVect &a_position, const RealVect &a_particleWidth, const Box &a_particleBox, const Real &a_volumeFactor, const Real *a_strength, const int &a_numComp, const bool a_forceIrregNGP) const noexcept
Function for depositing a single particle with a CIC scheme.
Definition CD_EBParticleMeshImplem.H:236
void interpolateParticleNGP(Real *a_particleField, const EBCellFAB &a_meshData, const RealVect &a_position, const int &a_numComp) const noexcept
Particle interpolation function using an NGP scheme.
Definition CD_EBParticleMeshImplem.H:339
void interpolateParticleTSC(Real *a_particleField, const EBCellFAB &a_meshData, const Box &a_validBox, const Box &a_gatherBox, const RealVect &a_position, const int &a_numComp, const bool a_forceIrregNGP) const noexcept
Particle interpolation function using a TSC scheme.
Definition CD_EBParticleMeshImplem.H:409
void depositParticleNGP(EBCellFAB &a_rho, const RealVect &a_position, const Real &a_volumeFactor, const Real *a_strength, const int &a_numComp) const noexcept
Wrapper function for depositing a single particle with a standard NGP scheme.
Definition CD_EBParticleMeshImplem.H:216
EBParticleMesh()
Default constructor. Must subsequently call define.
Definition CD_EBParticleMesh.cpp:20
void define(const ProblemDomain &a_domain, const Box &a_region, const EBISBox &a_ebisbox, const RealVect &a_dx, const RealVect &a_probLo)
Define function.
Definition CD_EBParticleMesh.cpp:39
void interpolate(List< P > &a_particles, const EBCellFAB &a_meshData, const DepositionType a_interpType, const bool a_forceIrregNGP=false) const
Interpolate mesh data onto a particle.
Definition CD_EBParticleMeshImplem.H:100
static constexpr int sanitize() noexcept
Sanitize the return function type, ensuring it is either Real or RealVect.
Definition CD_EBParticleMesh.H:113
void interpolateParticleCIC(Real *a_particleField, const EBCellFAB &a_meshData, const Box &a_validBox, const Box &a_gatherBox, const RealVect &a_position, const int &a_numComp, const bool a_forceIrregNGP) const noexcept
Particle interpolation function using a CIC scheme.
Definition CD_EBParticleMeshImplem.H:356
void depositParticleTSC(EBCellFAB &a_rho, const RealVect &a_position, const RealVect &a_particleWidth, const Box &a_particleBox, const Real &a_volumeFactor, const Real *a_strength, const int &a_numComp, const bool a_forceIrregNGP) const noexcept
Function for depositing a single particle with a TSC scheme.
Definition CD_EBParticleMeshImplem.H:283
RealVect m_dx
Grid resolution.
Definition CD_EBParticleMesh.H:148
ProblemDomain m_domain
Problem domain.
Definition CD_EBParticleMesh.H:128
EBISBox m_ebisbox
EBIS box.
Definition CD_EBParticleMesh.H:143
void deposit(EBCellFAB &a_meshData, const List< P > &a_particles, const DepositionType a_depositionType, const Real a_widthScale, const bool a_forceIrregNGP=false) const
Deposit a particle onto the mesh.
Definition CD_EBParticleMeshImplem.H:26
RealVect m_probLo
Lower-left corner of computational domain.
Definition CD_EBParticleMesh.H:153
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37