13#ifndef CD_TRACERPARTICLESOLVERIMPLEM_H
14#define CD_TRACERPARTICLESOLVERIMPLEM_H
23#include <CD_NamespaceHeader.H>
28 CH_TIME(
"TracerParticleSolver::TracerParticleSolver()");
32 m_name =
"TracerParticleSolver";
49 CH_TIME(
"TracerParticleSolver::TracerParticleSolver(RefCountedPtr<AmrMesh>, RefCountedPtr<ComputationalGeometry>)");
58 CH_TIME(
"TracerParticleSolver::~TracerParticleSolver()");
65 CH_TIME(
"TracerParticleSolver::parseOptions()");
79 CH_TIME(
"TracerParticleSolver::parseRuntimeOptions()");
93 CH_TIME(
"TracerParticleSolver::parseDeposition()");
103 pp.get(
"deposition",
str);
107 else if (
str ==
"cic") {
111 MayDay::Error(
"TracerParticleSolver::parseDeposition - unknown deposition method requested.");
114 pp.get(
"deposition_cf",
str);
115 if (
str ==
"interp") {
118 else if (
str ==
"halo") {
121 else if (
str ==
"halo_ngp") {
124 else if (
str ==
"transition") {
128 MayDay::Error(
"TracerParticleSolver::parseDeposition - unknown coarse-fine deposition method requested.");
132 pp.get(
"interpolation",
str);
136 else if (
str ==
"cic") {
140 MayDay::Error(
"TracerParticleSolver::parseDeposition - unknown interpolation method requested.");
150 CH_TIME(
"TracerParticleSolver::parsePlotVariables()");
165 CH_TIME(
"TracerParticleSolver::parseVerbosity()");
179 CH_TIME(
"TracerParticleSolver::registerOperators()");
184 if (
m_amr.isNull()) {
185 MayDay::Abort(
"TracerParticleSolver::registerOperators - need to set AmrMesh!");
197 CH_TIME(
"TracerParticleSolver::allocate()");
211 CH_TIME(
"TracerParticleSolver::setName(std::string)");
212 if (m_verbosity > 5) {
213 pout() << m_name +
"::setName(std::string)" <<
endl;
223 CH_TIME(
"TracerParticleSolver::setVolumeScale(bool)");
224 if (m_verbosity > 5) {
225 pout() << m_name +
"::setVolumeScale(bool)" <<
endl;
235 CH_TIME(
"TracerParticleSolver::setRealm(std::string)");
247 CH_TIME(
"TracerParticleSolver::setPhase(phase::which_phase)");
259 CH_TIME(
"TracerParticleSolver::setTime(int, Real, Real)");
273 CH_TIME(
"TracerParticleSolver::setAmr(RefCountedPtr<AmrMesh>)");
285 CH_TIME(
"TracerParticleSolver::setComputationalGeometry(RefCountedPtr<ComputationalGeometry>)");
287 pout() <<
m_name +
"::setComputationalGeometry(RefCountedPtr<ComputationalGeometry>)" <<
endl;
297 CH_TIME(
"TracerParticleSolver::setVelocity(EBAMRCellData)");
309 CH_TIME(
"TracerParticleSolver::preRegrid(int, int)");
324 CH_TIME(
"TracerParticleSolver::regrid(int, int, int)");
341 CH_TIME(
"TracerParticleSolver::remap()");
353 CH_TIME(
"TracerParticleSolver::setDeposition");
354 if (m_verbosity > 5) {
355 pout() << m_name +
"::setDeposition" <<
endl;
365 CH_TIME(
"TracerParticleSolver::deposit(EBAMRCellData)");
366 if (m_verbosity > 5) {
367 pout() << m_name +
"::deposit(EBAMRCellData)" <<
endl;
383 CH_TIME(
"TracerParticleSolver::interpolateWeight(EBAMRCellData)");
384 if (m_verbosity > 5) {
385 pout() << m_name +
"::interpolateWeight(EBAMRCellData)" <<
endl;
388 m_amr->interpolateParticles<
P,
Real&, &P::weight>(m_particles, m_realm, m_phase,
a_scalar, m_interpolation,
true);
395 CH_TIME(
"TracerParticleSolver::interpolateVelocities()");
412 CH_TIME(
"TracerParticleSolver::writePlotFile()");
444 DischargeIO::writeEBHDF5(
fname,
450 m_amr->getRefinementRatios(),
454 m_amr->getFinestLevel() + 1,
463 CH_TIME(
"TracerParticleSolver::getNumberOfPlotVariables()");
484 CH_TIME(
"TracerParticleSolver::getPlotVariableNames()");
514 const int a_level)
const noexcept
516 CH_TIME(
"TracerParticleSolver::writePlotData");
517 if (m_verbosity > 5) {
518 pout() << m_name +
"::writePlotData" <<
endl;
524 m_amr->
allocate(weight, m_realm, m_phase, 1);
526 this->deposit(weight);
532 if (m_plotVelocity) {
547 CH_TIMERS(
"TracerParticleSolver::writeData");
548 CH_TIMER(
"TracerParticleSolver::writeData::allocate",
t1);
549 CH_TIMER(
"TracerParticleSolver::writeData::local_copy",
t2);
550 CH_TIMER(
"TracerParticleSolver::writeData::interp_ghost",
t3);
551 CH_TIMER(
"TracerParticleSolver::writeData::interp_centroid",
t4);
552 CH_TIMER(
"TracerParticleSolver::writeData::final_copy",
t5);
553 if (m_verbosity > 5) {
554 pout() << m_name +
"::writeData" <<
endl;
598 CH_TIME(
"TracerParticleSolver::writeCheckpointLevel(HDF5Handle, int)");
600 pout() <<
m_name +
"::writeCheckpointLevel(HDF5Handle, int)" <<
endl;
612 CH_TIME(
"TracerParticleSolver::readCheckpointLevel(HDF5Handle, int)");
614 pout() <<
m_name +
"::readCheckpointLevel(HDF5Handle, int)" <<
endl;
625 CH_TIME(
"TracerParticleSolver::computeDt()");
630 Real dt = std::numeric_limits<Real>::infinity();
639#pragma omp parallel for schedule(runtime) reduction(min : dt)
665 CH_TIME(
"TracerParticleSolver::getParticles()");
677 CH_TIME(
"TracerParticleSolver::getParticles()");
689 CH_TIME(
"TracerParticleSolver::getVelocityField()");
701 CH_TIME(
"TracerParticleSolver::getDepositionType");
713 CH_TIME(
"TracerParticleSolver::getCoarseFineDepositionType");
725 CH_TIME(
"TracerParticleSolver::getInterpolationType");
734template <
class T,
class Ret, Ret (T::*MemberFunc)() const>
741 CH_TIME(
"TracerParticleSolver::depositParticles()");
742 if (m_verbosity > 5) {
743 pout() << m_name +
"::depositParticles()" <<
endl;
757#include <CD_NamespaceFooter.H>
CoarseFineDeposition
Coarse-fine deposition types (see CD_EBAMRParticleMesh for how these are handled).
Definition CD_CoarseFineDeposition.H:27
DepositionType
Deposition types.
Definition CD_DepositionType.H:24
Silly, but useful functions that override standard Chombo HDF5 IO.
Agglomeration of basic MPI reductions.
Declaration of a solver class that advances tracer particles.
static void volumeScale(EBAMRCellData &a_data, const Vector< Real > &a_dx)
Scale data by dx^SpaceDim.
Definition CD_DataOps.cpp:2236
static void setValue(LevelData< MFInterfaceFAB< T > > &a_lhs, const T &a_value)
Set value in an MFInterfaceFAB data holder.
Definition CD_DataOpsImplem.H:24
static void setCoveredValue(EBAMRCellData &a_lhs, const EBAMRCellData &a_coveredMask, const int a_comp, const Real a_value)
Set value in covered cells. Does specified component.
Definition CD_DataOps.cpp:2655
static void copy(MFAMRCellData &a_dst, const MFAMRCellData &a_src)
Copy data from one data holder to another.
Definition CD_DataOps.cpp:1201
static const std::string primal
Identifier for perimal realm.
Definition CD_Realm.H:44
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
virtual CoarseFineDeposition getCoarseFineDepositionType() const
Get the coarse-fine deposition type.
Definition CD_TracerParticleSolverImplem.H:711
ParticleContainer< P > m_particles
Computational particles.
Definition CD_TracerParticleSolver.H:412
virtual void remap()
Remap particles.
Definition CD_TracerParticleSolverImplem.H:339
virtual void setRealm(const std::string &a_realm)
Set the solver realm.
Definition CD_TracerParticleSolverImplem.H:233
void depositParticles(EBAMRCellData &a_phi, const ParticleContainer< T > &a_particles, const DepositionType a_baseDeposition, const CoarseFineDeposition a_coarseFineDeposition) const noexcept
Generic particle deposition method for putting a scalar field onto the mesh.
Definition CD_TracerParticleSolverImplem.H:736
void parsePlotVariables()
Parse plot variables.
Definition CD_TracerParticleSolverImplem.H:148
virtual void registerOperators() const
Register operators needed for AMR core functionality.
Definition CD_TracerParticleSolverImplem.H:177
phase::which_phase m_phase
Phase where this solver lives.
Definition CD_TracerParticleSolver.H:367
virtual void setName(const std::string &a_name) noexcept
Set the solver name.
Definition CD_TracerParticleSolverImplem.H:209
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26
virtual void setTime(const int a_step, const Real a_time, const Real a_dt)
Set the time for this solver.
Definition CD_TracerParticleSolverImplem.H:257
virtual void deposit(EBAMRCellData &a_phi) const noexcept
Deposit particle weight on mesh.
Definition CD_TracerParticleSolverImplem.H:363
CoarseFineDeposition m_coarseFineDeposition
Coarse-fine deposition strategy.
Definition CD_TracerParticleSolver.H:347
bool m_volumeScale
Do volumetric scaling when depositing (or not).
Definition CD_TracerParticleSolver.H:402
virtual void writeData(LevelData< EBCellFAB > &a_output, int &a_comp, const EBAMRCellData &a_data, const std::string a_outputRealm, const int a_level, const bool a_interpToCentroids, const bool a_interpGhost) const noexcept
Write data to output. Convenience function.
Definition CD_TracerParticleSolverImplem.H:539
virtual ~TracerParticleSolver()
Destructor.
Definition CD_TracerParticleSolverImplem.H:56
std::string m_realm
Realm where this solver lives.
Definition CD_TracerParticleSolver.H:352
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel)
Perform pre-regrid operations.
Definition CD_TracerParticleSolverImplem.H:307
DepositionType m_interpolation
Deposition type when interpolating to particles.
Definition CD_TracerParticleSolver.H:342
bool m_plotWeight
Hook for adding weight to plot file.
Definition CD_TracerParticleSolver.H:392
virtual ParticleContainer< P > & getParticles()
Get all particles.
Definition CD_TracerParticleSolverImplem.H:663
void parseDeposition()
Parse deposition method.
Definition CD_TracerParticleSolverImplem.H:91
void parseVerbosity()
Parse solver verbosity.
Definition CD_TracerParticleSolverImplem.H:163
int m_verbosity
Verbosity level.
Definition CD_TracerParticleSolver.H:387
RefCountedPtr< AmrMesh > m_amr
Handle to AMR mesh.
Definition CD_TracerParticleSolver.H:327
virtual Vector< std::string > getPlotVariableNames() const
Get plot variable names.
Definition CD_TracerParticleSolverImplem.H:482
DepositionType m_deposition
Deposition type when depositing particles to grid.
Definition CD_TracerParticleSolver.H:337
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Handle to computational geometry.
Definition CD_TracerParticleSolver.H:332
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_comp, const std::string &a_outputRealm, const int a_level) const noexcept
Write plot data.
Definition CD_TracerParticleSolverImplem.H:511
virtual void parseRuntimeOptions()
Parse solver run-time options.
Definition CD_TracerParticleSolverImplem.H:77
virtual void writePlotFile()
Write plot file.
Definition CD_TracerParticleSolverImplem.H:410
virtual void setDeposition(const DepositionType a_deposition) noexcept
Set deposition method.
Definition CD_TracerParticleSolverImplem.H:351
virtual void setPhase(const phase::which_phase &a_phase)
Set the solver phase.
Definition CD_TracerParticleSolverImplem.H:245
virtual DepositionType getDepositionType() const
Get the deposition type.
Definition CD_TracerParticleSolverImplem.H:699
Real m_dt
Time step.
Definition CD_TracerParticleSolver.H:372
virtual void allocate()
Allocate storage for this solver.
Definition CD_TracerParticleSolverImplem.H:195
std::string m_name
Solver name.
Definition CD_TracerParticleSolver.H:357
bool m_plotVelocity
Hook for adding velocity field to plot file.
Definition CD_TracerParticleSolver.H:397
int m_timeStep
Time step.
Definition CD_TracerParticleSolver.H:382
virtual DepositionType getInterpolationType() const
Get the interpolation type.
Definition CD_TracerParticleSolverImplem.H:723
virtual void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_compGeom)
Set the computational geometry.
Definition CD_TracerParticleSolverImplem.H:283
virtual void interpolateVelocities()
Interpolate particles velocities.
Definition CD_TracerParticleSolverImplem.H:393
const EBAMRCellData & getVelocityField() const
Return the velocity field.
Definition CD_TracerParticleSolverImplem.H:687
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid this solver.
Definition CD_TracerParticleSolverImplem.H:322
std::string m_className
Class name.
Definition CD_TracerParticleSolver.H:362
virtual void parseOptions()
Parse solver options.
Definition CD_TracerParticleSolverImplem.H:63
virtual void setVelocity(const EBAMRCellData &a_velocityField)
Set the tracer particle velocity field.
Definition CD_TracerParticleSolverImplem.H:295
Real m_time
Time.
Definition CD_TracerParticleSolver.H:377
virtual void interpolateWeight(const EBAMRCellData &a_scalar) noexcept
Interpolate a scalar field onto the particle weight.
Definition CD_TracerParticleSolverImplem.H:381
EBAMRCellData m_velocityField
Mesh-based velocity field. Must be set through setVelocity.
Definition CD_TracerParticleSolver.H:407
virtual int getNumberOfPlotVariables() const
Get the number of plot variables.
Definition CD_TracerParticleSolverImplem.H:461
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amrMesh)
Set AmrMesh.
Definition CD_TracerParticleSolverImplem.H:271
virtual Real computeDt() const
Compute dt = dx/max(v_x, v_y, v_z) minimized over all particles.
Definition CD_TracerParticleSolverImplem.H:623
virtual void setVolumeScale(const bool a_scale) noexcept
Turn on/off volume scaling.
Definition CD_TracerParticleSolverImplem.H:221
Real min(const Real &a_input) noexcept
Get the minimum of the input, reduced over MPI ranks (in the Chombo communicator)
Definition CD_ParallelOpsImplem.H:59
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38
@ gas
Gas phase.
Definition CD_MultiFluidIndexSpace.H:39