chombo-discharge
CD_ItoPlasmaGodunovStepper.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_ItoPlasmaGodunovStepper_H
13 #define CD_ItoPlasmaGodunovStepper_H
14 
15 // Our includes
16 #include <CD_ItoPlasmaStepper.H>
17 #include <CD_Timer.H>
18 #include <CD_PointParticle.H>
19 #include <CD_NamespaceHeader.H>
20 
21 namespace Physics {
22  namespace ItoPlasma {
23 
28  {
29  public:
34 
39  ItoPlasmaGodunovStepper(RefCountedPtr<ItoPlasmaPhysics>& a_physics);
40 
44  virtual ~ItoPlasmaGodunovStepper();
45 
50  virtual Real
51  advance(const Real a_dt) override;
52 
56  virtual void
57  allocate() override;
58 
62  virtual void
63  parseOptions() override;
64 
68  virtual void
69  parseRuntimeOptions() override;
70 
78  virtual void
79  preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
80 
87  virtual void
88  regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
89 
90 #ifdef CH_USE_HDF5
95  virtual void
96  readCheckpointHeader(HDF5HeaderData& a_header) override;
97 #endif
98 
99 #ifdef CH_USE_HDF5
104  virtual void
105  writeCheckpointHeader(HDF5HeaderData& a_header) const override;
106 #endif
107 
108 #ifdef CH_USE_HDF5
114  virtual void
115  writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const override;
116 #endif
117 
118 #ifdef CH_USE_HDF5
124  virtual void
125  readCheckpointData(HDF5Handle& a_handle, const int a_lvl) override;
126 #endif
127 
128  protected:
132  enum class WhichAlgorithm
133  {
134  EulerMaruyama,
135  };
136 
141 
146 
152 
156  bool m_gradientFix;
157 
161  Real m_prevDt;
162 
167 
172 
176  Vector<RefCountedPtr<ParticleContainer<PointParticle>>> m_conductivityParticles;
177 
181  Vector<RefCountedPtr<ParticleContainer<PointParticle>>> m_rhoDaggerParticles;
182 
186  virtual void
187  parseAlgorithm() noexcept;
188 
192  virtual void
193  parseCheckpointParticles() noexcept;
194 
198  virtual void
199  setOldPositions() noexcept;
200 
205  virtual void
206  barrier() const noexcept;
207 
213  virtual void
214  remapPointParticles(Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_particles,
215  const SpeciesSubset a_subset) noexcept;
216 
223  virtual void
224  depositPointParticles(const Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_particles,
225  const SpeciesSubset a_subset) noexcept;
226 
232  virtual void
233  clearPointParticles(const Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_particles,
234  const SpeciesSubset a_subset) noexcept;
235 
241  virtual void
242  computeConductivities(const Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_particles) noexcept;
243 
249  virtual void
250  computeCellConductivity(EBAMRCellData& a_conductivityCell,
251  const Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_particles) noexcept;
252 
257  virtual void
258  computeFaceConductivity() noexcept;
259 
263  virtual void
264  setupSemiImplicitPoisson(const Real a_dt) noexcept;
265 
272  virtual void
273  removeCoveredPointParticles(Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_particles,
274  const EBRepresentation a_representation,
275  const Real a_tolerance) const noexcept;
276 
281  virtual void
283  Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_conductivityParticles) noexcept;
284 
289  virtual void
290  advanceParticlesEulerMaruyama(const Real a_dt) noexcept;
291 
297  virtual void
298  diffuseParticlesEulerMaruyama(Vector<RefCountedPtr<ParticleContainer<PointParticle>>>& a_rhoDaggerParticles,
299  const Real a_dt) noexcept;
300 
307  virtual void
308  stepEulerMaruyama(const Real a_dt) noexcept;
309  };
310  } // namespace ItoPlasma
311 } // namespace Physics
312 
313 #include <CD_NamespaceFooter.H>
314 
315 #endif
EBRepresentation
Enum for putting some logic into how we think about EBs. This is just a simply supporting class for v...
Definition: CD_EBRepresentation.H:22
Abstract class for integrating the Ito plasma equations.
SpeciesSubset
Enum for differentiating between types of particles.
Definition: CD_ItoPlasmaStepper.H:36
Declaration of a computational point particle.
Implementation of CD_Timer.H.
Templated class for holding particles on an AMR hierarchy with particle remapping.
Definition: CD_ParticleContainer.H:48
Implementation of ItoPlasmaStepper that uses a semi-implicit split-step formalism for advancing the I...
Definition: CD_ItoPlasmaGodunovStepper.H:28
Vector< RefCountedPtr< ParticleContainer< PointParticle > > > m_rhoDaggerParticles
Storage for particles that gave rho^dagger.
Definition: CD_ItoPlasmaGodunovStepper.H:181
ItoPlasmaGodunovStepper()=delete
Disallowed default constructor. Use the full constructor.
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid methods – puts all data on the new mesh.
Definition: CD_ItoPlasmaGodunovStepper.cpp:327
virtual void setupSemiImplicitPoisson(const Real a_dt) noexcept
Set up the semi-implicit Poisson solver.
Definition: CD_ItoPlasmaGodunovStepper.cpp:843
virtual ~ItoPlasmaGodunovStepper()
Destructor. Does nothing.
Definition: CD_ItoPlasmaGodunovStepper.cpp:40
virtual void remapPointParticles(Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const SpeciesSubset a_subset) noexcept
Remap the input point particles.
Definition: CD_ItoPlasmaGodunovStepper.cpp:450
virtual Real advance(const Real a_dt) override
Advance the Ito-Poisson-KMC system over a_dt.
Definition: CD_ItoPlasmaGodunovStepper.cpp:161
virtual void advanceParticlesEulerMaruyama(const Real a_dt) noexcept
Advance the particles using the Euler-Maruyama scheme.
Definition: CD_ItoPlasmaGodunovStepper.cpp:960
virtual void stepEulerMaruyama(const Real a_dt) noexcept
Step the particles according to the regular Euler-Maruyama scheme.
Definition: CD_ItoPlasmaGodunovStepper.cpp:1077
Real m_prevDt
Previous time step.
Definition: CD_ItoPlasmaGodunovStepper.H:161
virtual void parseAlgorithm() noexcept
Parse advancement algorithm.
Definition: CD_ItoPlasmaGodunovStepper.cpp:125
virtual void diffuseParticlesEulerMaruyama(Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_rhoDaggerParticles, const Real a_dt) noexcept
Perform the diffusive advance in the Euler-Maruyama step.
Definition: CD_ItoPlasmaGodunovStepper.cpp:1025
Vector< RefCountedPtr< ParticleContainer< PointParticle > > > m_conductivityParticles
Storage for simplified particles that gave us sigma^k.
Definition: CD_ItoPlasmaGodunovStepper.H:176
virtual void clearPointParticles(const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const SpeciesSubset a_subset) noexcept
Clear the input particle data holders.
Definition: CD_ItoPlasmaGodunovStepper.cpp:655
virtual void parseCheckpointParticles() noexcept
Parse checkpoint-restart functionality.
Definition: CD_ItoPlasmaGodunovStepper.cpp:148
virtual void computeCellConductivity(EBAMRCellData &a_conductivityCell, const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles) noexcept
Compute the cell-centered conductivity.
Definition: CD_ItoPlasmaGodunovStepper.cpp:774
WhichAlgorithm m_algorithm
Which advancement algorithm to use.
Definition: CD_ItoPlasmaGodunovStepper.H:166
virtual void setOldPositions() noexcept
Set the starting positions for the ItoSolver particles.
Definition: CD_ItoPlasmaGodunovStepper.cpp:421
virtual void barrier() const noexcept
Set an MPI barrier if using debug mode.
Definition: CD_ItoPlasmaGodunovStepper.cpp:79
bool m_writeCheckpointParticles
If true, then the particles are checkpointed so we can regrid on checkpoint-restart.
Definition: CD_ItoPlasmaGodunovStepper.H:140
virtual void parseRuntimeOptions() override
Parse run-time options.
Definition: CD_ItoPlasmaGodunovStepper.cpp:106
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Perform pre-regrid operations.
Definition: CD_ItoPlasmaGodunovStepper.cpp:309
WhichAlgorithm
Simple enum for distinguishing between algorithms.
Definition: CD_ItoPlasmaGodunovStepper.H:133
virtual void allocate() override
Allocate storage required for advancing the equations.
Definition: CD_ItoPlasmaGodunovStepper.cpp:49
virtual void copyConductivityParticles(Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_conductivityParticles) noexcept
Copy particles from the ItoSolver into PointParticles whose weight are ItoParticle::m_weight * ItoPar...
Definition: CD_ItoPlasmaGodunovStepper.cpp:916
bool m_readCheckpointParticles
If true, then the HDF5 checkpoint file contained particles that we can read.
Definition: CD_ItoPlasmaGodunovStepper.H:145
bool m_canRegridOnRestart
If true, then the class supports regrid-on-restart.
Definition: CD_ItoPlasmaGodunovStepper.H:151
Timer m_timer
Timer used for run-time logging of routines.
Definition: CD_ItoPlasmaGodunovStepper.H:171
virtual void parseOptions() override
Parse options.
Definition: CD_ItoPlasmaGodunovStepper.cpp:92
virtual void computeFaceConductivity() noexcept
Compute the cell-centered conductivity.
Definition: CD_ItoPlasmaGodunovStepper.cpp:814
virtual void removeCoveredPointParticles(Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const EBRepresentation a_representation, const Real a_tolerance) const noexcept
Remove covered particles.
Definition: CD_ItoPlasmaGodunovStepper.cpp:877
virtual void computeConductivities(const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles) noexcept
Compute all conductivities (cell, face, and EB) from the input point particles.
Definition: CD_ItoPlasmaGodunovStepper.cpp:759
virtual void depositPointParticles(const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const SpeciesSubset a_subset) noexcept
Deposit the input point particles on the mesh.
Definition: CD_ItoPlasmaGodunovStepper.cpp:554
Base time stepper class that advances the Ito-Poisson system of equations.
Definition: CD_ItoPlasmaStepper.H:54
A particle class that only has a position and a weight.
Definition: CD_PointParticle.H:29
Class which is used for run-time monitoring of events.
Definition: CD_Timer.H:31
Name containing various physics models for running chombo-discharge code.
Definition: CD_AdvectionDiffusion.H:15