Version: SMASH-3.3
dynamicfluidfinder.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2022-2025
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 
10 #ifndef SRC_INCLUDE_SMASH_DYNAMICFLUIDFINDER_H_
11 #define SRC_INCLUDE_SMASH_DYNAMICFLUIDFINDER_H_
12 
13 #include <limits>
14 #include <map>
15 #include <vector>
16 
17 #include "actionfinderfactory.h"
18 #include "icparameters.h"
19 #include "input_keys.h"
20 
21 namespace smash {
22 
33  public:
47  const std::map<int32_t, double> &background,
48  const InitialConditionParameters &ic_params)
49  : energy_density_lattice_{lattice},
50  background_{background},
51  energy_density_threshold_{ic_params.energy_density_threshold.value()},
52  min_time_{ic_params.min_time.value()},
53  max_time_{ic_params.max_time.value()},
54  formation_time_fraction_{ic_params.formation_time_fraction.value()},
55  smearing_kernel_at_0_{ic_params.smearing_kernel_at_0.value()},
56  fluid_cells_{ic_params.num_fluid_cells.value()},
57  fluidizable_processes_{ic_params.fluidizable_processes.value()},
58  delay_initial_elastic_{ic_params.delay_initial_elastic.value()} {};
59 
69  ActionList find_actions_in_cell(
70  const ParticleList &search_list, double dt, double gcell_vol,
71  const std::vector<FourVector> &beam_momentum) const override;
72 
75  const ParticleList &, const ParticleList &, const double,
76  const std::vector<FourVector> &) const override {
77  return {};
78  }
79 
82  const ParticleList &, const Particles &, double,
83  const std::vector<FourVector> &) const override {
84  return {};
85  }
86 
103  ActionList find_final_actions(const Particles &search_list) const override;
104 
111  bool above_threshold(const ParticleData &pdata) const;
112 
120  bool is_process_fluidizable(const HistoryData &history) const;
121 
122  private:
136  const std::map<int32_t, double> &background_;
138  const double energy_density_threshold_ = smash_NaN<double>;
140  const double min_time_ = smash_NaN<double>;
142  const double max_time_ = smash_NaN<double>;
144  const double formation_time_fraction_ = smash_NaN<double>;
146  const double smearing_kernel_at_0_ = smash_NaN<double>;
148  const int fluid_cells_ = smash_NaN<int>;
152  const bool delay_initial_elastic_ = true;
153 
155  mutable int particles_in_core_ = 0;
157  mutable double energy_in_core_ = 0.;
158 };
159 
160 } // namespace smash
161 
162 #endif // SRC_INCLUDE_SMASH_DYNAMICFLUIDFINDER_H_
ActionFinderInterface is the abstract base class for all action finders, i.e.
Finder for dynamic fluidizations.
const RectangularLattice< EnergyMomentumTensor > & energy_density_lattice_
Lattice where energy momentum tensor is computed.
ActionList find_actions_with_surrounding_particles(const ParticleList &, const Particles &, double, const std::vector< FourVector > &) const override
Ignore the surrounding searches for fluidization.
const double min_time_
Minimum time (in lab frame) in fm to allow fluidization.
const double formation_time_fraction_
Fraction of formation time after which a particles can fluidize.
ActionList find_final_actions(const Particles &search_list) const override
Prepare corona particles left in the IC for the afterburner.
ActionList find_actions_with_neighbors(const ParticleList &, const ParticleList &, const double, const std::vector< FourVector > &) const override
Ignore the neighbor search for fluidization.
bool is_process_fluidizable(const HistoryData &history) const
Checks if a given process type is in fluidizable_processes_.
DynamicFluidizationFinder(const RectangularLattice< EnergyMomentumTensor > &lattice, const std::map< int32_t, double > &background, const InitialConditionParameters &ic_params)
Construct finder for fluidization action.
int particles_in_core_
Accumulated number of core particles.
const bool delay_initial_elastic_
Whether the first elastic interaction of an initial nucleon is fluidizable.
bool above_threshold(const ParticleData &pdata) const
Determine if fluidization condition is satisfied.
ActionList find_actions_in_cell(const ParticleList &search_list, double dt, double gcell_vol, const std::vector< FourVector > &beam_momentum) const override
Find particles to fluidize, depending on the energy density around them.
const std::map< int32_t, double > & background_
Background energy density at positions of particles, using the id as key.
const double max_time_
Maximum time (in lab frame) in fm to allow fluidization.
double energy_in_core_
Accumulated energy of core particles.
const FluidizableProcessesBitSet fluidizable_processes_
Processes that create a fluidizable particle.
const int fluid_cells_
Number of cells to interpolate the energy density.
const double energy_density_threshold_
Minimum energy density surrounding the particle to fluidize it.
const double smearing_kernel_at_0_
Smearing kernel at the position of the particle of interest.
ParticleData contains the dynamic information of a certain particle.
Definition: particledata.h:59
The Particles class abstracts the storage and manipulation of particles.
Definition: particles.h:33
A container class to hold all the arrays on the lattice and access them.
Definition: lattice.h:49
std::bitset< 5 > FluidizableProcessesBitSet
Definition: action.h:24
A structure to hold information about the history of the particle, e.g.
Definition: particledata.h:31
The variables in this POD struct are of type std::optional<double> so that only the relevant paramete...
Definition: icparameters.h:19