Commit 0ac7431e authored by Matthieu Schaller's avatar Matthieu Schaller Committed by Peter W. Draper
Browse files

Particle splitting "a la EAGLE"

parent 8dafa3fb
...@@ -373,6 +373,15 @@ prevent the smoothing length from going below this value in dense ...@@ -373,6 +373,15 @@ prevent the smoothing length from going below this value in dense
environments. This will lead to smoothing over more particles than specified environments. This will lead to smoothing over more particles than specified
by :math:`\eta`. by :math:`\eta`.
The optional parameter ``particle_splitting`` (Default: 0) activates the
splitting of overly massive particles into 2. By switching this on, the code
will loop over all the particles at every tree rebuild and split the particles
with a mass above a fixed threshold into two copies that are slightly shifted
(by a randomly orientated vector of norm :math:`0.2h`). Their masses and other
relevant particle-carried quantities are then halved. The mass threshold for
splitting is set by the parameter ``particle_splitting_mass_threshold`` which is
specified using the internal unit system.
The final set of parameters in this section determine the initial and minimum The final set of parameters in this section determine the initial and minimum
temperatures of the particles. temperatures of the particles.
...@@ -399,14 +408,17 @@ The full section to start a typical cosmological run would be: ...@@ -399,14 +408,17 @@ The full section to start a typical cosmological run would be:
.. code:: YAML .. code:: YAML
SPH: SPH:
resolution_eta: 1.2 resolution_eta: 1.2
CFL_condition: 0.1 CFL_condition: 0.1
h_tolerance: 1e-4 h_tolerance: 1e-4
h_min_ratio: 0.1 h_min_ratio: 0.1
initial_temperature: 273 h_max: 1. # U_L
minimal_temperature: 100 initial_temperature: 273 # U_T
H_mass_fraction: 0.755 minimal_temperature: 100 # U_T
H_ionization_temperature: 1e4 H_mass_fraction: 0.755
H_ionization_temperature: 1e4 # U_T
particle_splitting: 1
particle_splitting_mass_threshold: 5e-3 # U_M
.. _Parameters_Stars: .. _Parameters_Stars:
......
...@@ -48,12 +48,14 @@ Gravity: ...@@ -48,12 +48,14 @@ Gravity:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_min_ratio: 0.1 # Minimal smoothing in units of softening.
h_max: 0.5 # Maximal softening in co-moving internal units. h_max: 0.5 # Maximal softening in co-moving internal units.
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
minimal_temperature: 100.0 # (internal units) minimal_temperature: 100.0 # (internal units)
initial_temperature: 268.7 initial_temperature: 268.7 # (internal units)
particle_splitting: 1 # Particle splitting is ON
particle_splitting_mass_threshold: 7e-4 # (internal units, i.e. 7e6 Msun ~ 4x initial gas particle mass)
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -48,12 +48,14 @@ Gravity: ...@@ -48,12 +48,14 @@ Gravity:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_min_ratio: 0.1 # Minimal smoothing in units of softening.
h_max: 0.5 # Maximal softening in co-moving internal units. h_max: 0.5 # Maximal softening in co-moving internal units.
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
minimal_temperature: 100.0 # (internal units) minimal_temperature: 100.0 # (internal units)
initial_temperature: 268.7 initial_temperature: 268.7 # (internal units)
particle_splitting: 1 # Particle splitting is ON
particle_splitting_mass_threshold: 7e-4 # (internal units, i.e. 7e6 Msun ~ 4x initial gas particle mass)
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -48,12 +48,14 @@ Gravity: ...@@ -48,12 +48,14 @@ Gravity:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_min_ratio: 0.1 # Minimal smoothing in units of softening.
h_max: 0.5 # Maximal softening in co-moving internal units. h_max: 0.5 # Maximal softening in co-moving internal units.
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
minimal_temperature: 100.0 # (internal units) minimal_temperature: 100.0 # (internal units)
initial_temperature: 268.7 initial_temperature: 268.7 # (internal units)
particle_splitting: 1 # Particle splitting is ON
particle_splitting_mass_threshold: 7e-4 # (internal units, i.e. 7e6 Msun ~ 4x initial gas particle mass)
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -11,6 +11,9 @@ the following changes have been made: ...@@ -11,6 +11,9 @@ the following changes have been made:
been changed to 1.79 ckpc. This follows the recommendations of been changed to 1.79 ckpc. This follows the recommendations of
Ludlow et al. 2019. Old values were 0.7 pkpc and 2.69 ckpc for Ludlow et al. 2019. Old values were 0.7 pkpc and 2.69 ckpc for
all the particle species. all the particle species.
- SPH particles with a mass larger than 7*10^6 Msun (~4x the initial
gas particle mass) are now split into 2 equal mass particles
within the smoothing length of the original particle.
- The metallicity-dependent density threshold for star formation - The metallicity-dependent density threshold for star formation
uses the smoothed metallicities and not the raw metallicities uses the smoothed metallicities and not the raw metallicities
any more. any more.
......
...@@ -54,11 +54,13 @@ Gravity: ...@@ -54,11 +54,13 @@ Gravity:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_min_ratio: 0.1 # Minimal smoothing in units of softening.
h_max: 0.5 # Maximal softening in co-moving internal units. h_max: 0.5 # Maximal softening in co-moving internal units.
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
minimal_temperature: 100 # (internal units) minimal_temperature: 100 # (internal units)
particle_splitting: 1
particle_splitting_mass_threshold: 7e-4 # Internal units (i.e. 7e6 Msun ~ 4 times the initial gas mass)
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -62,11 +62,13 @@ Gravity: ...@@ -62,11 +62,13 @@ Gravity:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_min_ratio: 0.1 # Minimal smoothing in units of softening.
h_max: 0.5 # Maximal softening in co-moving internal units. h_max: 0.5 # Maximal softening in co-moving internal units.
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
minimal_temperature: 100 # (internal units) minimal_temperature: 100 # (internal units)
particle_splitting: 1
particle_splitting_mass_threshold: 7e-4 # Internal units (i.e. 7e6 Msun ~ 4 times the initial gas mass)
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -53,11 +53,13 @@ Gravity: ...@@ -53,11 +53,13 @@ Gravity:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_min_ratio: 0.1 # Minimal smoothing in units of softening.
h_max: 0.5 # Maximal softening in co-moving internal units. h_max: 0.5 # Maximal softening in co-moving internal units.
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
minimal_temperature: 100 # (internal units) minimal_temperature: 100 # (internal units)
particle_splitting: 1
particle_splitting_mass_threshold: 7e-4 # Internal units (i.e. 7e6 Msun ~ 4 times the initial gas mass)
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -63,11 +63,13 @@ Gravity: ...@@ -63,11 +63,13 @@ Gravity:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_min_ratio: 0.1 # Minimal smoothing in units of softening.
h_max: 0.5 # Maximal softening in co-moving internal units. h_max: 0.5 # Maximal softening in co-moving internal units.
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
minimal_temperature: 100 # (internal units) minimal_temperature: 100 # (internal units)
particle_splitting: 1
particle_splitting_mass_threshold: 7e-4 # Internal units (i.e. 7e6 Msun ~ 4 times the initial gas mass)
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -28,26 +28,28 @@ Cosmology: ...@@ -28,26 +28,28 @@ Cosmology:
# Parameters for the hydrodynamics scheme # Parameters for the hydrodynamics scheme
SPH: SPH:
resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel).
CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration.
use_mass_weighted_num_ngb: 0 # (Optional) Are we using the mass-weighted definition of the number of neighbours? use_mass_weighted_num_ngb: 0 # (Optional) Are we using the mass-weighted definition of the number of neighbours?
h_tolerance: 1e-4 # (Optional) Relative accuracy of the Netwon-Raphson scheme for the smoothing lengths. h_tolerance: 1e-4 # (Optional) Relative accuracy of the Netwon-Raphson scheme for the smoothing lengths.
h_max: 10. # (Optional) Maximal allowed smoothing length in internal units. Defaults to FLT_MAX if unspecified. h_max: 10. # (Optional) Maximal allowed smoothing length in internal units. Defaults to FLT_MAX if unspecified.
h_min_ratio: 0. # (Optional) Minimal allowed smoothing length in units of the softening. Defaults to 0 if unspecified. h_min_ratio: 0. # (Optional) Minimal allowed smoothing length in units of the softening. Defaults to 0 if unspecified.
max_volume_change: 1.4 # (Optional) Maximal allowed change of kernel volume over one time-step. max_volume_change: 1.4 # (Optional) Maximal allowed change of kernel volume over one time-step.
max_ghost_iterations: 30 # (Optional) Maximal number of iterations allowed to converge towards the smoothing length. max_ghost_iterations: 30 # (Optional) Maximal number of iterations allowed to converge towards the smoothing length.
initial_temperature: 0 # (Optional) Initial temperature (in internal units) to set the gas particles at start-up. Value is ignored if set to 0. particle_splitting: 1 # (Optional) Are we splitting particles that are too massive (default: 0)
minimal_temperature: 0 # (Optional) Minimal temperature (in internal units) allowed for the gas particles. Value is ignored if set to 0. particle_splitting_mass_threshold: 7e-4 # (Optional) Mass threshold for particle splitting (in internal units)
H_mass_fraction: 0.755 # (Optional) Hydrogen mass fraction used for initial conversion from temp to internal energy. Default value is derived from the physical constants. initial_temperature: 0 # (Optional) Initial temperature (in internal units) to set the gas particles at start-up. Value is ignored if set to 0.
H_ionization_temperature: 1e4 # (Optional) Temperature of the transition from neutral to ionized Hydrogen for primoridal gas. minimal_temperature: 0 # (Optional) Minimal temperature (in internal units) allowed for the gas particles. Value is ignored if set to 0.
viscosity_alpha: 0.8 # (Optional) Override for the initial value of the artificial viscosity. In schemes that have a fixed AV, this remains as alpha throughout the run. H_mass_fraction: 0.755 # (Optional) Hydrogen mass fraction used for initial conversion from temp to internal energy. Default value is derived from the physical constants.
viscosity_alpha_max: 2.0 # (Optional) Maximal value for the artificial viscosity in schemes that allow alpha to vary. H_ionization_temperature: 1e4 # (Optional) Temperature of the transition from neutral to ionized Hydrogen for primoridal gas.
viscosity_alpha_min: 0.1 # (Optional) Minimal value for the artificial viscosity in schemes that allow alpha to vary. viscosity_alpha: 0.8 # (Optional) Override for the initial value of the artificial viscosity. In schemes that have a fixed AV, this remains as alpha throughout the run.
viscosity_length: 0.1 # (Optional) Decay length for the artificial viscosity in schemes that allow alpha to vary. viscosity_alpha_max: 2.0 # (Optional) Maximal value for the artificial viscosity in schemes that allow alpha to vary.
diffusion_alpha: 0.0 # (Optional) Override the initial value for the thermal diffusion coefficient in schemes with thermal diffusion. viscosity_alpha_min: 0.1 # (Optional) Minimal value for the artificial viscosity in schemes that allow alpha to vary.
diffusion_beta: 0.01 # (Optional) Override the decay/rise rate tuning parameter for the thermal diffusion. viscosity_length: 0.1 # (Optional) Decay length for the artificial viscosity in schemes that allow alpha to vary.
diffusion_alpha_max: 1.0 # (Optional) Override the maximal thermal diffusion coefficient that is allowed for a given particle. diffusion_alpha: 0.0 # (Optional) Override the initial value for the thermal diffusion coefficient in schemes with thermal diffusion.
diffusion_alpha_min: 0.0 # (Optional) Override the minimal thermal diffusion coefficient that is allowed for a given particle. diffusion_beta: 0.01 # (Optional) Override the decay/rise rate tuning parameter for the thermal diffusion.
diffusion_alpha_max: 1.0 # (Optional) Override the maximal thermal diffusion coefficient that is allowed for a given particle.
diffusion_alpha_min: 0.0 # (Optional) Override the minimal thermal diffusion coefficient that is allowed for a given particle.
# Parameters of the stars neighbour search # Parameters of the stars neighbour search
Stars: Stars:
......
...@@ -76,7 +76,7 @@ AM_SOURCES = space.c runner_main.c runner_doiact_hydro.c runner_doiact_limiter.c ...@@ -76,7 +76,7 @@ AM_SOURCES = space.c runner_main.c runner_doiact_hydro.c runner_doiact_limiter.c
runner_doiact_stars.c runner_doiact_black_holes.c runner_ghost.c runner_recv.c \ runner_doiact_stars.c runner_doiact_black_holes.c runner_ghost.c runner_recv.c \
runner_sort.c runner_drift.c runner_black_holes.c runner_time_integration.c \ runner_sort.c runner_drift.c runner_black_holes.c runner_time_integration.c \
runner_doiact_hydro_vec.c runner_others.c\ runner_doiact_hydro_vec.c runner_others.c\
queue.c task.c cell.c engine.c engine_maketasks.c \ queue.c task.c cell.c engine.c engine_maketasks.c engine_split_particles.c \
engine_marktasks.c engine_drift.c engine_unskip.c engine_collect_end_of_step.c \ engine_marktasks.c engine_drift.c engine_unskip.c engine_collect_end_of_step.c \
engine_redistribute.c engine_fof.c serial_io.c timers.c debug.c scheduler.c \ engine_redistribute.c engine_fof.c serial_io.c timers.c debug.c scheduler.c \
proxy.c parallel_io.c units.c common_io.c single_io.c multipole.c version.c map.c \ proxy.c parallel_io.c units.c common_io.c single_io.c multipole.c version.c map.c \
......
...@@ -403,6 +403,21 @@ __attribute__((always_inline)) INLINE static void chemistry_add_bpart_to_bpart( ...@@ -403,6 +403,21 @@ __attribute__((always_inline)) INLINE static void chemistry_add_bpart_to_bpart(
bp_data->iron_mass_from_SNIa += swallowed_data->iron_mass_from_SNIa; bp_data->iron_mass_from_SNIa += swallowed_data->iron_mass_from_SNIa;
} }
/**
* @brief Split the metal content of a particle into n pieces
*
* We only need to split the fields that are not fractions.
*
* @param p The #part.
* @param n The number of pieces to split into.
*/
__attribute__((always_inline)) INLINE static void chemistry_split_part(
struct part* p, const double n) {
p->chemistry_data.mass_from_SNIa /= n;
p->chemistry_data.mass_from_SNII /= n;
p->chemistry_data.mass_from_AGB /= n;
}
/** /**
* @brief Returns the total metallicity (metal mass fraction) of the * @brief Returns the total metallicity (metal mass fraction) of the
* star particle to be used in feedback/enrichment related routines. * star particle to be used in feedback/enrichment related routines.
......
...@@ -229,7 +229,9 @@ __attribute__((always_inline)) INLINE static void chemistry_first_init_spart( ...@@ -229,7 +229,9 @@ __attribute__((always_inline)) INLINE static void chemistry_first_init_spart(
*/ */
__attribute__((always_inline)) INLINE static void chemistry_bpart_from_part( __attribute__((always_inline)) INLINE static void chemistry_bpart_from_part(
struct chemistry_bpart_data* bp_data, struct chemistry_bpart_data* bp_data,
const struct chemistry_part_data* p_data, const double gas_mass) {} const struct chemistry_part_data* p_data, const double gas_mass) {
error("Loic: to be implemented");
}
/** /**
* @brief Add the chemistry data of a gas particle to a black hole. * @brief Add the chemistry data of a gas particle to a black hole.
...@@ -242,7 +244,9 @@ __attribute__((always_inline)) INLINE static void chemistry_bpart_from_part( ...@@ -242,7 +244,9 @@ __attribute__((always_inline)) INLINE static void chemistry_bpart_from_part(
*/ */
__attribute__((always_inline)) INLINE static void chemistry_add_part_to_bpart( __attribute__((always_inline)) INLINE static void chemistry_add_part_to_bpart(
struct chemistry_bpart_data* bp_data, struct chemistry_bpart_data* bp_data,
const struct chemistry_part_data* p_data, const double gas_mass) {} const struct chemistry_part_data* p_data, const double gas_mass) {
error("Loic: to be implemented");
}
/** /**
* @brief Add the chemistry data of a black hole to another one. * @brief Add the chemistry data of a black hole to another one.
...@@ -254,6 +258,19 @@ __attribute__((always_inline)) INLINE static void chemistry_add_part_to_bpart( ...@@ -254,6 +258,19 @@ __attribute__((always_inline)) INLINE static void chemistry_add_part_to_bpart(
*/ */
__attribute__((always_inline)) INLINE static void chemistry_add_bpart_to_bpart( __attribute__((always_inline)) INLINE static void chemistry_add_bpart_to_bpart(
struct chemistry_bpart_data* bp_data, struct chemistry_bpart_data* bp_data,
const struct chemistry_bpart_data* swallowed_data) {} const struct chemistry_bpart_data* swallowed_data) {
error("Loic: to be implemented");
}
/**
* @brief Split the metal content of a particle into n pieces
*
* @param p The #part.
* @param n The number of pieces to split into.
*/
__attribute__((always_inline)) INLINE static void chemistry_split_part(
struct part* p, const double n) {
error("Loic: to be implemented");
}
#endif /* SWIFT_CHEMISTRY_GEAR_H */ #endif /* SWIFT_CHEMISTRY_GEAR_H */
...@@ -214,6 +214,17 @@ __attribute__((always_inline)) INLINE static void chemistry_add_bpart_to_bpart( ...@@ -214,6 +214,17 @@ __attribute__((always_inline)) INLINE static void chemistry_add_bpart_to_bpart(
struct chemistry_bpart_data* bp_data, struct chemistry_bpart_data* bp_data,
const struct chemistry_bpart_data* swallowed_data) {} const struct chemistry_bpart_data* swallowed_data) {}
/**
* @brief Split the metal content of a particle into n pieces
*
* Nothing to do here.
*
* @param p The #part.
* @param n The number of pieces to split into.
*/
__attribute__((always_inline)) INLINE static void chemistry_split_part(
struct part* p, const double n) {}
/** /**
* @brief Returns the total metallicity (metal mass fraction) of the * @brief Returns the total metallicity (metal mass fraction) of the
* star particle to be used in feedback/enrichment related routines. * star particle to be used in feedback/enrichment related routines.
......
...@@ -308,6 +308,19 @@ __attribute__((always_inline)) INLINE static float cooling_get_radiated_energy( ...@@ -308,6 +308,19 @@ __attribute__((always_inline)) INLINE static float cooling_get_radiated_energy(
return xp->cooling_data.radiated_energy; return xp->cooling_data.radiated_energy;
} }
/**
* @brief Split the coolong content of a particle into n pieces
*
* @param p The #part.
* @param xp The #xpart.
* @param n The number of pieces to split into.
*/
static INLINE void cooling_split_part(struct part* p, struct xpart* xp,
double n) {
xp->cooling_data.radiated_energy /= n;
}
/** /**
* @brief Initialises the cooling properties. * @brief Initialises the cooling properties.
* *
......
...@@ -642,6 +642,18 @@ __attribute__((always_inline)) INLINE float cooling_get_radiated_energy( ...@@ -642,6 +642,18 @@ __attribute__((always_inline)) INLINE float cooling_get_radiated_energy(
return xp->cooling_data.radiated_energy; return xp->cooling_data.radiated_energy;
} }
/**
* @brief Split the coolong content of a particle into n pieces
*
* @param p The #part.
* @param xp The #xpart.
* @param n The number of pieces to split into.
*/
void cooling_split_part(struct part *p, struct xpart *xp, double n) {
xp->cooling_data.radiated_energy /= n;
}
/** /**
* @brief Inject a fixed amount of energy to each particle in the simulation * @brief Inject a fixed amount of energy to each particle in the simulation
* to mimic Hydrogen reionization. * to mimic Hydrogen reionization.
......
...@@ -71,6 +71,8 @@ float cooling_get_temperature( ...@@ -71,6 +71,8 @@ float cooling_get_temperature(
float cooling_get_radiated_energy(const struct xpart *restrict xp); float cooling_get_radiated_energy(const struct xpart *restrict xp);
void cooling_split_part(struct part *p, struct xpart *xp, double n);
void cooling_Hydrogen_reionization(const struct cooling_function_data *cooling, void cooling_Hydrogen_reionization(const struct cooling_function_data *cooling,
const struct cosmology *cosmo, const struct cosmology *cosmo,
struct space *s); struct space *s);
......
...@@ -226,6 +226,19 @@ __attribute__((always_inline)) INLINE static float cooling_get_radiated_energy( ...@@ -226,6 +226,19 @@ __attribute__((always_inline)) INLINE static float cooling_get_radiated_energy(
return xp->cooling_data.radiated_energy; return xp->cooling_data.radiated_energy;
} }
/**
* @brief Split the coolong content of a particle into n pieces
*
* @param p The #part.
* @param xp The #xpart.
* @param n The number of pieces to split into.
*/
static INLINE void cooling_split_part(struct part* p, struct xpart* xp,
double n) {
xp->cooling_data.radiated_energy /= n;
}
/** /**
* @brief Initialises the cooling function properties from the parameter file * @brief Initialises the cooling function properties from the parameter file
* *
......
...@@ -302,6 +302,19 @@ __attribute__((always_inline)) INLINE static float cooling_get_radiated_energy( ...@@ -302,6 +302,19 @@ __attribute__((always_inline)) INLINE static float cooling_get_radiated_energy(
return xp->cooling_data.radiated_energy; return xp->cooling_data.radiated_energy;
} }
/**
* @brief Split the coolong content of a particle into n pieces
*
* @param p The #part.
* @param xp The #xpart.
* @param n The number of pieces to split into.
*/
static INLINE void cooling_split_part(struct part* p, struct xpart* xp,
double n) {
xp->cooling_data.radiated_energy /= n;
}
/** /**
* @brief Initialises the cooling properties. * @brief Initialises the cooling properties.
* *
......
...@@ -763,6 +763,19 @@ __attribute__((always_inline)) INLINE static float cooling_timestep( ...@@ -763,6 +763,19 @@ __attribute__((always_inline)) INLINE static float cooling_timestep(
return FLT_MAX; return FLT_MAX;
} }
/**
* @brief Split the coolong content of a particle into n pieces
*
* @param p The #part.
* @param xp The #xpart.
* @param n The number of pieces to split into.
*/
INLINE static void cooling_split_part(struct part* p, struct xpart* xp,
double n) {
error("Loic: to be implemented");
}
/** /**
* @brief Initialises the cooling unit system. * @brief Initialises the cooling unit system.
* *
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment