12#ifndef CD_TracerParticleSolverImplem_H
13#define CD_TracerParticleSolverImplem_H
22#include <CD_NamespaceHeader.H>
27 CH_TIME(
"TracerParticleSolver::TracerParticleSolver()");
31 m_name =
"TracerParticleSolver";
48 CH_TIME(
"TracerParticleSolver::TracerParticleSolver(RefCountedPtr<AmrMesh>, RefCountedPtr<ComputationalGeometry>)");
57 CH_TIME(
"TracerParticleSolver::~TracerParticleSolver()");
64 CH_TIME(
"TracerParticleSolver::parseOptions()");
78 CH_TIME(
"TracerParticleSolver::parseRuntimeOptions()");
92 CH_TIME(
"TracerParticleSolver::parseDeposition()");
102 pp.get(
"deposition",
str);
106 else if (
str ==
"cic") {
110 MayDay::Error(
"TracerParticleSolver::parseDeposition - unknown deposition method requested.");
113 pp.get(
"deposition_cf",
str);
114 if (
str ==
"interp") {
117 else if (
str ==
"halo") {
120 else if (
str ==
"halo_ngp") {
123 else if (
str ==
"transition") {
127 MayDay::Error(
"TracerParticleSolver::parseDeposition - unknown coarse-fine deposition method requested.");
131 pp.get(
"interpolation",
str);
135 else if (
str ==
"cic") {
139 MayDay::Error(
"TracerParticleSolver::parseDeposition - unknown interpolation method requested.");
149 CH_TIME(
"TracerParticleSolver::parsePlotVariables()");
164 CH_TIME(
"TracerParticleSolver::parseVerbosity()");
178 CH_TIME(
"TracerParticleSolver::registerOperators()");
183 if (
m_amr.isNull()) {
184 MayDay::Abort(
"TracerParticleSolver::registerOperators - need to set AmrMesh!");
196 CH_TIME(
"TracerParticleSolver::allocate()");
210 CH_TIME(
"TracerParticleSolver::setName(std::string)");
211 if (m_verbosity > 5) {
212 pout() << m_name +
"::setName(std::string)" <<
endl;
222 CH_TIME(
"TracerParticleSolver::setVolumeScale(bool)");
223 if (m_verbosity > 5) {
224 pout() << m_name +
"::setVolumeScale(bool)" <<
endl;
234 CH_TIME(
"TracerParticleSolver::setRealm(std::string)");
246 CH_TIME(
"TracerParticleSolver::setPhase(phase::which_phase)");
258 CH_TIME(
"TracerParticleSolver::setTime(int, Real, Real)");
272 CH_TIME(
"TracerParticleSolver::setAmr(RefCountedPtr<AmrMesh>)");
284 CH_TIME(
"TracerParticleSolver::setComputationalGeometry(RefCountedPtr<ComputationalGeometry>)");
286 pout() <<
m_name +
"::setComputationalGeometry(RefCountedPtr<ComputationalGeometry>)" <<
endl;
296 CH_TIME(
"TracerParticleSolver::setVelocity(EBAMRCellData)");
308 CH_TIME(
"TracerParticleSolver::preRegrid(int, int)");
323 CH_TIME(
"TracerParticleSolver::regrid(int, int, int)");
340 CH_TIME(
"TracerParticleSolver::remap()");
352 CH_TIME(
"TracerParticleSolver::setDeposition");
353 if (m_verbosity > 5) {
354 pout() << m_name +
"::setDeposition" <<
endl;
364 CH_TIME(
"TracerParticleSolver::deposit(EBAMRCellData)");
365 if (m_verbosity > 5) {
366 pout() << m_name +
"::deposit(EBAMRCellData)" <<
endl;
382 CH_TIME(
"TracerParticleSolver::interpolateWeight(EBAMRCellData)");
383 if (m_verbosity > 5) {
384 pout() << m_name +
"::interpolateWeight(EBAMRCellData)" <<
endl;
387 m_amr->interpolateParticles<
P,
Real&, &P::weight>(m_particles, m_realm, m_phase,
a_scalar, m_interpolation,
true);
394 CH_TIME(
"TracerParticleSolver::interpolateVelocities()");
411 CH_TIME(
"TracerParticleSolver::writePlotFile()");
443 DischargeIO::writeEBHDF5(
fname,
449 m_amr->getRefinementRatios(),
453 m_amr->getFinestLevel() + 1,
462 CH_TIME(
"TracerParticleSolver::getNumberOfPlotVariables()");
483 CH_TIME(
"TracerParticleSolver::getPlotVariableNames()");
513 const int a_level)
const noexcept
515 CH_TIME(
"TracerParticleSolver::writePlotData");
516 if (m_verbosity > 5) {
517 pout() << m_name +
"::writePlotData" <<
endl;
523 m_amr->allocate(weight, m_realm, m_phase, 1);
525 this->deposit(weight);
531 if (m_plotVelocity) {
546 CH_TIMERS(
"TracerParticleSolver::writeData");
547 CH_TIMER(
"TracerParticleSolver::writeData::allocate",
t1);
548 CH_TIMER(
"TracerParticleSolver::writeData::local_copy",
t2);
549 CH_TIMER(
"TracerParticleSolver::writeData::interp_ghost",
t3);
550 CH_TIMER(
"TracerParticleSolver::writeData::interp_centroid",
t4);
551 CH_TIMER(
"TracerParticleSolver::writeData::final_copy",
t5);
552 if (m_verbosity > 5) {
553 pout() << m_name +
"::writeData" <<
endl;
597 CH_TIME(
"TracerParticleSolver::writeCheckpointLevel(HDF5Handle, int)");
599 pout() <<
m_name +
"::writeCheckpointLevel(HDF5Handle, int)" <<
endl;
611 CH_TIME(
"TracerParticleSolver::readCheckpointLevel(HDF5Handle, int)");
613 pout() <<
m_name +
"::readCheckpointLevel(HDF5Handle, int)" <<
endl;
624 CH_TIME(
"TracerParticleSolver::computeDt()");
629 Real dt = std::numeric_limits<Real>::infinity();
638#pragma omp parallel for schedule(runtime) reduction(min : dt)
664 CH_TIME(
"TracerParticleSolver::getParticles()");
676 CH_TIME(
"TracerParticleSolver::getParticles()");
688 CH_TIME(
"TracerParticleSolver::getVelocityField()");
700 CH_TIME(
"TracerParticleSolver::getDepositionType");
712 CH_TIME(
"TracerParticleSolver::getCoarseFineDepositionType");
724 CH_TIME(
"TracerParticleSolver::getInterpolationType");
733template <
class T,
class Ret, Ret (T::*MemberFunc)() const>
740 CH_TIME(
"TracerParticleSolver::depositParticles()");
741 if (m_verbosity > 5) {
742 pout() << m_name +
"::depositParticles()" <<
endl;
756#include <CD_NamespaceFooter.H>
CoarseFineDeposition
Coarse-fine deposition types (see CD_EBAMRParticleMesh for how these are handled).
Definition CD_CoarseFineDeposition.H:26
DepositionType
Deposition types.
Definition CD_DepositionType.H:23
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:2146
static void setCoveredValue(EBAMRCellData &a_lhs, const int a_comp, const Real a_value)
Set value in covered cells. Does specified component.
Definition CD_DataOps.cpp:2552
static void setValue(LevelData< MFInterfaceFAB< T > > &a_lhs, const T &a_value)
Set value in an MFInterfaceFAB data holder.
Definition CD_DataOpsImplem.H:23
static void copy(MFAMRCellData &a_dst, const MFAMRCellData &a_src)
Copy data from one data holder to another.
Definition CD_DataOps.cpp:1132
static const std::string primal
Identifier for perimal realm.
Definition CD_Realm.H:43
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
virtual CoarseFineDeposition getCoarseFineDepositionType() const
Get the coarse-fine deposition type.
Definition CD_TracerParticleSolverImplem.H:710
ParticleContainer< P > m_particles
Computational particles.
Definition CD_TracerParticleSolver.H:405
virtual void remap()
Remap particles.
Definition CD_TracerParticleSolverImplem.H:338
virtual void setRealm(const std::string &a_realm)
Set the solver realm.
Definition CD_TracerParticleSolverImplem.H:232
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:735
void parsePlotVariables()
Parse plot variables.
Definition CD_TracerParticleSolverImplem.H:147
virtual void registerOperators() const
Register operators needed for AMR core functionality.
Definition CD_TracerParticleSolverImplem.H:176
phase::which_phase m_phase
Phase where this solver lives.
Definition CD_TracerParticleSolver.H:360
virtual void setName(const std::string &a_name) noexcept
Set the solver name.
Definition CD_TracerParticleSolverImplem.H:208
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:25
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:256
virtual void deposit(EBAMRCellData &a_phi) const noexcept
Deposit particle weight on mesh.
Definition CD_TracerParticleSolverImplem.H:362
CoarseFineDeposition m_coarseFineDeposition
Coarse-fine deposition strategy.
Definition CD_TracerParticleSolver.H:340
bool m_volumeScale
Do volumetric scaling when depositing (or not).
Definition CD_TracerParticleSolver.H:395
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:538
virtual ~TracerParticleSolver()
Destructor.
Definition CD_TracerParticleSolverImplem.H:55
std::string m_realm
Realm where this solver lives.
Definition CD_TracerParticleSolver.H:345
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel)
Perform pre-regrid operations.
Definition CD_TracerParticleSolverImplem.H:306
DepositionType m_interpolation
Deposition type when interpolating to particles.
Definition CD_TracerParticleSolver.H:335
bool m_plotWeight
Hook for adding weight to plot file.
Definition CD_TracerParticleSolver.H:385
virtual ParticleContainer< P > & getParticles()
Get all particles.
Definition CD_TracerParticleSolverImplem.H:662
void parseDeposition()
Parse deposition method.
Definition CD_TracerParticleSolverImplem.H:90
void parseVerbosity()
Parse solver verbosity.
Definition CD_TracerParticleSolverImplem.H:162
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:510
int m_verbosity
Verbosity level.
Definition CD_TracerParticleSolver.H:380
RefCountedPtr< AmrMesh > m_amr
Handle to AMR mesh.
Definition CD_TracerParticleSolver.H:320
virtual Vector< std::string > getPlotVariableNames() const
Get plot variable names.
Definition CD_TracerParticleSolverImplem.H:481
DepositionType m_deposition
Deposition type when depositing particles to grid.
Definition CD_TracerParticleSolver.H:330
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Handle to computational geometry.
Definition CD_TracerParticleSolver.H:325
virtual void parseRuntimeOptions()
Parse solver run-time options.
Definition CD_TracerParticleSolverImplem.H:76
virtual void writePlotFile()
Write plot file.
Definition CD_TracerParticleSolverImplem.H:409
virtual void setDeposition(const DepositionType a_deposition) noexcept
Set deposition method.
Definition CD_TracerParticleSolverImplem.H:350
virtual void setPhase(const phase::which_phase &a_phase)
Set the solver phase.
Definition CD_TracerParticleSolverImplem.H:244
virtual DepositionType getDepositionType() const
Get the deposition type.
Definition CD_TracerParticleSolverImplem.H:698
Real m_dt
Time step.
Definition CD_TracerParticleSolver.H:365
virtual void allocate()
Allocate storage for this solver.
Definition CD_TracerParticleSolverImplem.H:194
std::string m_name
Solver name.
Definition CD_TracerParticleSolver.H:350
bool m_plotVelocity
Hook for adding velocity field to plot file.
Definition CD_TracerParticleSolver.H:390
int m_timeStep
Time step.
Definition CD_TracerParticleSolver.H:375
virtual DepositionType getInterpolationType() const
Get the interpolation type.
Definition CD_TracerParticleSolverImplem.H:722
virtual void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_compGeom)
Set the computational geometry.
Definition CD_TracerParticleSolverImplem.H:282
virtual void interpolateVelocities()
Interpolate particles velocities.
Definition CD_TracerParticleSolverImplem.H:392
const EBAMRCellData & getVelocityField() const
Return the velocity field.
Definition CD_TracerParticleSolverImplem.H:686
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid this solver.
Definition CD_TracerParticleSolverImplem.H:321
std::string m_className
Class name.
Definition CD_TracerParticleSolver.H:355
virtual void parseOptions()
Parse solver options.
Definition CD_TracerParticleSolverImplem.H:62
virtual void setVelocity(const EBAMRCellData &a_velocityField)
Set the tracer particle velocity field.
Definition CD_TracerParticleSolverImplem.H:294
Real m_time
Time.
Definition CD_TracerParticleSolver.H:370
virtual void interpolateWeight(const EBAMRCellData &a_scalar) noexcept
Interpolate a scalar field onto the particle weight.
Definition CD_TracerParticleSolverImplem.H:380
EBAMRCellData m_velocityField
Mesh-based velocity field. Must be set through setVelocity.
Definition CD_TracerParticleSolver.H:400
virtual int getNumberOfPlotVariables() const
Get the number of plot variables.
Definition CD_TracerParticleSolverImplem.H:460
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amrMesh)
Set AmrMesh.
Definition CD_TracerParticleSolverImplem.H:270
virtual Real computeDt() const
Write checkpoint data into HDF5 file. @paramo[out] a_handle HDF5 file.
Definition CD_TracerParticleSolverImplem.H:622
virtual void setVolumeScale(const bool a_scale) noexcept
Turn on/off volume scaling.
Definition CD_TracerParticleSolverImplem.H:220
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:58