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

Ported small changes from COLIBRE cooling to QLA cooling

parent bab13b8e
No related branches found
No related tags found
No related merge requests found
...@@ -94,6 +94,10 @@ void cooling_update(const struct cosmology *cosmo, ...@@ -94,6 +94,10 @@ void cooling_update(const struct cosmology *cosmo,
* @brief Compute the internal energy of a #part based on the cooling function * @brief Compute the internal energy of a #part based on the cooling function
* but for a given temperature. * but for a given temperature.
* *
* This is used e.g. for particles in HII regions that are set to a constant
* temperature, but their internal energies should reflect the particle
* composition .
*
* @param phys_const #phys_const data structure. * @param phys_const #phys_const data structure.
* @param hydro_props The properties of the hydro scheme. * @param hydro_props The properties of the hydro scheme.
* @param us The internal system of units. * @param us The internal system of units.
...@@ -119,6 +123,8 @@ float cooling_get_internalenergy_for_temperature( ...@@ -119,6 +123,8 @@ float cooling_get_internalenergy_for_temperature(
/* Get the Hydrogen mass fraction */ /* Get the Hydrogen mass fraction */
const float XH = 1. - phys_const->const_primordial_He_fraction; const float XH = 1. - phys_const->const_primordial_He_fraction;
/* Normal case --> Interpolate the table */
/* Convert Hydrogen mass fraction into Hydrogen number density */ /* Convert Hydrogen mass fraction into Hydrogen number density */
const float rho = hydro_get_physical_density(p, cosmo); const float rho = hydro_get_physical_density(p, cosmo);
const double n_H = rho * XH / phys_const->const_proton_mass; const double n_H = rho * XH / phys_const->const_proton_mass;
...@@ -167,20 +173,28 @@ float cooling_get_internalenergy_for_temperature( ...@@ -167,20 +173,28 @@ float cooling_get_internalenergy_for_temperature(
* metallicity. * metallicity.
* @param XH The Hydrogen abundance of the gas. * @param XH The Hydrogen abundance of the gas.
* @param u_phys Internal energy of the gas in internal physical units. * @param u_phys Internal energy of the gas in internal physical units.
* @param HII_region Is this patch of gas in an HII region?
*/ */
float cooling_get_temperature_from_gas( float cooling_get_temperature_from_gas(
const struct phys_const *phys_const, const struct cosmology *cosmo, const struct phys_const *phys_const, const struct cosmology *cosmo,
const struct cooling_function_data *cooling, const float rho_phys, const struct cooling_function_data *cooling, const float rho_phys,
const float logZZsol, const float XH, const float u_phys) { const float logZZsol, const float XH, const float u_phys,
const int HII_region) {
if (HII_region)
error("HII regions are not implemented in the EAGLE-XL flavour");
/* Convert to CGS */ /* Convert to CGS */
const double u_cgs = u_phys * cooling->internal_energy_to_cgs; const double u_cgs = u_phys * cooling->internal_energy_to_cgs;
/* Get density in Hydrogen number density */
const double n_H = rho_phys * XH / phys_const->const_proton_mass; const double n_H = rho_phys * XH / phys_const->const_proton_mass;
const double n_H_cgs = n_H * cooling->number_density_to_cgs; const double n_H_cgs = n_H * cooling->number_density_to_cgs;
/* Normal case --> Interpolate the table */
/* compute hydrogen number density, metallicity and redshift indices and /* compute hydrogen number density, metallicity and redshift indices and
* offsets */ * offsets */
float d_red, d_met, d_n_H; float d_red, d_met, d_n_H;
int red_index, met_index, n_H_index; int red_index, met_index, n_H_index;
...@@ -203,7 +217,8 @@ float cooling_get_temperature_from_gas( ...@@ -203,7 +217,8 @@ float cooling_get_temperature_from_gas(
/** /**
* @brief Compute the temperature of a #part based on the cooling function. * @brief Compute the temperature of a #part based on the cooling function.
* *
* The temperature returned is consistent with the cooling rates. * The temperature returned is consistent with the cooling rates or
* is the temperature of an HII region if the particle is flagged as such.
* *
* @param phys_const #phys_const data structure. * @param phys_const #phys_const data structure.
* @param hydro_props The properties of the hydro scheme. * @param hydro_props The properties of the hydro scheme.
...@@ -227,15 +242,13 @@ float cooling_get_temperature(const struct phys_const *phys_const, ...@@ -227,15 +242,13 @@ float cooling_get_temperature(const struct phys_const *phys_const,
"--temperature runtime flag?"); "--temperature runtime flag?");
#endif #endif
/* Get physical internal energy */ /* Get quantities in physical frame */
const float u_phys = hydro_get_physical_internal_energy(p, xp, cosmo); const float u_phys = hydro_get_physical_internal_energy(p, xp, cosmo);
const float rho_phys = hydro_get_physical_density(p, cosmo);
/* Get the Hydrogen mass fraction */ /* Get the Hydrogen mass fraction */
const float XH = 1. - phys_const->const_primordial_He_fraction; const float XH = 1. - phys_const->const_primordial_He_fraction;
/* Convert Hydrogen mass fraction into Hydrogen number density */
const float rho_phys = hydro_get_physical_density(p, cosmo);
/* Get this particle's metallicity ratio to solar. /* Get this particle's metallicity ratio to solar.
* *
* Note that we do not need the individual element's ratios that * Note that we do not need the individual element's ratios that
...@@ -244,8 +257,11 @@ float cooling_get_temperature(const struct phys_const *phys_const, ...@@ -244,8 +257,11 @@ float cooling_get_temperature(const struct phys_const *phys_const,
const float logZZsol = const float logZZsol =
abundance_ratio_to_solar(p, cooling, phys_const, dummy); abundance_ratio_to_solar(p, cooling, phys_const, dummy);
/* Are we in an HII region? */
const int HII_region = 0; /* No HII regions in the EAGLE-XL flavour */
return cooling_get_temperature_from_gas(phys_const, cosmo, cooling, rho_phys, return cooling_get_temperature_from_gas(phys_const, cosmo, cooling, rho_phys,
logZZsol, XH, u_phys); logZZsol, XH, u_phys, HII_region);
} }
/** /**
...@@ -477,6 +493,7 @@ void cooling_cool_part(const struct phys_const *phys_const, ...@@ -477,6 +493,7 @@ void cooling_cool_part(const struct phys_const *phys_const,
/* No cooling happens over zero time */ /* No cooling happens over zero time */
if (dt == 0.) { if (dt == 0.) {
return; return;
} }
...@@ -674,6 +691,7 @@ __attribute__((always_inline)) INLINE void cooling_first_init_part( ...@@ -674,6 +691,7 @@ __attribute__((always_inline)) INLINE void cooling_first_init_part(
*/ */
__attribute__((always_inline)) INLINE float cooling_get_radiated_energy( __attribute__((always_inline)) INLINE float cooling_get_radiated_energy(
const struct xpart *xp) { const struct xpart *xp) {
return -1.f; return -1.f;
} }
...@@ -780,6 +798,8 @@ void cooling_init_backend(struct swift_params *parameter_file, ...@@ -780,6 +798,8 @@ void cooling_init_backend(struct swift_params *parameter_file,
cooling->number_density_to_cgs = cooling->number_density_to_cgs =
units_cgs_conversion_factor(us, UNIT_CONV_NUMBER_DENSITY); units_cgs_conversion_factor(us, UNIT_CONV_NUMBER_DENSITY);
cooling->number_density_from_cgs = 1. / cooling->number_density_to_cgs; cooling->number_density_from_cgs = 1. / cooling->number_density_to_cgs;
cooling->density_to_cgs = units_cgs_conversion_factor(us, UNIT_CONV_DENSITY);
cooling->density_from_cgs = 1. / cooling->density_to_cgs;
/* Store some constants in CGS units */ /* Store some constants in CGS units */
const float units_kB[5] = {1, 2, -2, 0, -1}; const float units_kB[5] = {1, 2, -2, 0, -1};
...@@ -791,6 +811,7 @@ void cooling_init_backend(struct swift_params *parameter_file, ...@@ -791,6 +811,7 @@ void cooling_init_backend(struct swift_params *parameter_file,
cooling->log10_kB_cgs = log10(kB_cgs); cooling->log10_kB_cgs = log10(kB_cgs);
cooling->inv_proton_mass_cgs = 1. / proton_mass_cgs; cooling->inv_proton_mass_cgs = 1. / proton_mass_cgs;
cooling->proton_mass_cgs = proton_mass_cgs;
cooling->T_CMB_0 = phys_const->const_T_CMB_0 * cooling->T_CMB_0 = phys_const->const_T_CMB_0 *
units_cgs_conversion_factor(us, UNIT_CONV_TEMPERATURE); units_cgs_conversion_factor(us, UNIT_CONV_TEMPERATURE);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
/* Local includes. */ /* Local includes. */
#include "cooling_struct.h" #include "cooling_struct.h"
#include "cooling_tables.h"
struct part; struct part;
struct xpart; struct xpart;
...@@ -65,7 +66,8 @@ void cooling_first_init_part(const struct phys_const *phys_const, ...@@ -65,7 +66,8 @@ void cooling_first_init_part(const struct phys_const *phys_const,
float cooling_get_temperature_from_gas( float cooling_get_temperature_from_gas(
const struct phys_const *phys_const, const struct cosmology *cosmo, const struct phys_const *phys_const, const struct cosmology *cosmo,
const struct cooling_function_data *cooling, const float rho_phys, const struct cooling_function_data *cooling, const float rho_phys,
const float XH, const float logZZsol, const float u_phys); const float XH, const float logZZsol, const float u_phys,
const int HII_region);
float cooling_get_temperature(const struct phys_const *phys_const, float cooling_get_temperature(const struct phys_const *phys_const,
const struct hydro_props *hydro_props, const struct hydro_props *hydro_props,
......
...@@ -155,9 +155,18 @@ struct cooling_function_data { ...@@ -155,9 +155,18 @@ struct cooling_function_data {
/*! Number density conversion from CGS to internal units (for quick access) */ /*! Number density conversion from CGS to internal units (for quick access) */
double number_density_from_cgs; double number_density_from_cgs;
/*! Density conversion from internal units to CGS (for quick access) */
double density_to_cgs;
/*! Density conversion from CGS to internal units (for quick access) */
double density_from_cgs;
/*! Inverse of proton mass in cgs (for quick access) */ /*! Inverse of proton mass in cgs (for quick access) */
double inv_proton_mass_cgs; double inv_proton_mass_cgs;
/*! Proton mass in cgs (for quick access) */
double proton_mass_cgs;
/*! Logarithm base 10 of the Boltzmann constant in CGS (for quick access) */ /*! Logarithm base 10 of the Boltzmann constant in CGS (for quick access) */
double log10_kB_cgs; double log10_kB_cgs;
...@@ -187,4 +196,9 @@ struct cooling_part_data {}; ...@@ -187,4 +196,9 @@ struct cooling_part_data {};
*/ */
struct cooling_xpart_data {}; struct cooling_xpart_data {};
/**
* @brief Subgrid properties to calculate
*/
enum cooling_subgrid_properties { cooling_compute_inexisting_property };
#endif /* SWIFT_COOLING_STRUCT_QLA_H */ #endif /* SWIFT_COOLING_STRUCT_QLA_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment