Skip to content
Snippets Groups Projects
Commit 5fcec49a authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Clarified the units of Lambda in the const-lambda cooling case.

parent 1c727746
No related branches found
No related tags found
No related merge requests found
...@@ -59,4 +59,4 @@ InitialConditions: ...@@ -59,4 +59,4 @@ InitialConditions:
# Constant lambda cooling function # Constant lambda cooling function
LambdaCooling: LambdaCooling:
lambda_cgs: 1e-26 # Cooling rate (in cgs units) lambda_cgs: 1e-26 # Cooling rate (in cgs units [erg * s^-1 * cm^-3])
...@@ -198,7 +198,7 @@ ConstCooling: ...@@ -198,7 +198,7 @@ ConstCooling:
# Constant lambda cooling function # Constant lambda cooling function
LambdaCooling: LambdaCooling:
lambda_cgs: 2.0 # Cooling rate (in cgs units) lambda_cgs: 1e-22 # Cooling rate (in cgs units [erg * s^-1 * cm^-3])
cooling_tstep_mult: 1.0 # (Optional) Dimensionless pre-factor for the time-step condition. cooling_tstep_mult: 1.0 # (Optional) Dimensionless pre-factor for the time-step condition.
# Cooling with Grackle 3.0 # Cooling with Grackle 3.0
......
...@@ -42,12 +42,15 @@ ...@@ -42,12 +42,15 @@
/** /**
* @brief Calculates du/dt in CGS units for a particle. * @brief Calculates du/dt in CGS units for a particle.
* *
* The cooling rate is \f$\frac{du}{dt} = -\Lambda \frac{n_H^2}{\rho} \f$. * The cooling rate is \f$\frac{du}{dt} = -\Lambda \frac{n_H^2}{\rho} \f$ and
* the returned value is in physical [erg * g^-1 * s^-1].
* *
* @param cosmo The current cosmological model. * @param cosmo The current cosmological model.
* @param hydro_props The properties of the hydro scheme. * @param hydro_props The properties of the hydro scheme.
* @param cooling The #cooling_function_data used in the run. * @param cooling The #cooling_function_data used in the run.
* @param p Pointer to the particle data.. * @param p Pointer to the particle data.
* @return The change in energy per unit mass due to cooling for this particle
* in cgs units [erg * g^-1 * s^-1].
*/ */
__attribute__((always_inline)) INLINE static double cooling_rate_cgs( __attribute__((always_inline)) INLINE static double cooling_rate_cgs(
const struct cosmology* cosmo, const struct hydro_props* hydro_props, const struct cosmology* cosmo, const struct hydro_props* hydro_props,
...@@ -100,7 +103,7 @@ __attribute__((always_inline)) INLINE static void cooling_cool_part( ...@@ -100,7 +103,7 @@ __attribute__((always_inline)) INLINE static void cooling_cool_part(
/* Current energy */ /* Current energy */
const float u_old = hydro_get_physical_internal_energy(p, xp, cosmo); const float u_old = hydro_get_physical_internal_energy(p, xp, cosmo);
/* Current du_dt in physical coordinates */ /* Current du_dt in physical coordinates (internal units) */
const float hydro_du_dt = hydro_get_physical_internal_energy_dt(p, cosmo); const float hydro_du_dt = hydro_get_physical_internal_energy_dt(p, cosmo);
/* Calculate cooling du_dt (in cgs units) */ /* Calculate cooling du_dt (in cgs units) */
...@@ -136,14 +139,17 @@ __attribute__((always_inline)) INLINE static void cooling_cool_part( ...@@ -136,14 +139,17 @@ __attribute__((always_inline)) INLINE static void cooling_cool_part(
/* Update the internal energy time derivative */ /* Update the internal energy time derivative */
hydro_set_physical_internal_energy_dt(p, cosmo, total_du_dt); hydro_set_physical_internal_energy_dt(p, cosmo, total_du_dt);
/* Store the radiated energy (assuming we did not hit the limiter) */ /* Store the radiated energy (assuming dt will not change) */
xp->cooling_data.radiated_energy += xp->cooling_data.radiated_energy +=
-hydro_get_mass(p) * cooling_du_dt * dt_therm; -hydro_get_mass(p) * (total_du_dt - hydro_du_dt) * dt_therm;
} }
/** /**
* @brief Computes the time-step due to cooling for this particle. * @brief Computes the time-step due to cooling for this particle.
* *
* We compute a time-step \f$ \alpha \frac{u}{du/dt} \f$ in physical
* coordinates. \f$\alpha\f$ is a parameter of the cooling function.
*
* @param cooling The #cooling_function_data used in the run. * @param cooling The #cooling_function_data used in the run.
* @param phys_const The physical constants in internal units. * @param phys_const The physical constants in internal units.
* @param cosmo The current cosmological model. * @param cosmo The current cosmological model.
...@@ -161,9 +167,7 @@ __attribute__((always_inline)) INLINE static float cooling_timestep( ...@@ -161,9 +167,7 @@ __attribute__((always_inline)) INLINE static float cooling_timestep(
const struct xpart* restrict xp) { const struct xpart* restrict xp) {
/* Start with the case where there is no limit */ /* Start with the case where there is no limit */
if (cooling->cooling_tstep_mult == FLT_MAX) { if (cooling->cooling_tstep_mult == FLT_MAX) return FLT_MAX;
return FLT_MAX;
}
/* Get current internal energy and cooling rate */ /* Get current internal energy and cooling rate */
const float u = hydro_get_physical_internal_energy(p, xp, cosmo); const float u = hydro_get_physical_internal_energy(p, xp, cosmo);
...@@ -255,8 +259,10 @@ static INLINE void cooling_init_backend(struct swift_params* parameter_file, ...@@ -255,8 +259,10 @@ static INLINE void cooling_init_backend(struct swift_params* parameter_file,
static INLINE void cooling_print_backend( static INLINE void cooling_print_backend(
const struct cooling_function_data* cooling) { const struct cooling_function_data* cooling) {
message("Cooling function is 'Constant lambda' with Lambda=%g [cgs]", message(
cooling->lambda_cgs); "Cooling function is 'Constant lambda' with Lambda=%g [erg * s^-1 * "
"cm^-3]",
cooling->lambda_cgs);
if (cooling->cooling_tstep_mult == FLT_MAX) if (cooling->cooling_tstep_mult == FLT_MAX)
message("Cooling function time-step size is unlimited"); message("Cooling function time-step size is unlimited");
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
*/ */
struct cooling_function_data { struct cooling_function_data {
/*! Cooling rate in cgs units */ /*! Cooling rate in physical cgs units [erg * s^-1 * cm^-3] */
double lambda_cgs; double lambda_cgs;
/*! Conversion factor from internal units to cgs for density */ /*! Conversion factor from internal units to cgs for density */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment