Commit 206eae1d authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Updated all the other hydro schemes.

parent 1da94574
......@@ -32,27 +32,59 @@
#include <float.h>
/**
* @brief Returns the comoving internal energy of a particle
* @brief Returns the comoving internal energy of a particle at the last
* time the particle was kicked.
*
* @param p The particle of interest
* @param xp The extended data of the particle of interest.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_comoving_internal_energy(const struct part *restrict p) {
hydro_get_comoving_internal_energy(const struct part *restrict p,
const struct xpart *restrict xp) {
return p->u;
return xp->u_full;
}
/**
* @brief Returns the physical internal energy of a particle
* @brief Returns the physical internal energy of a particle at the last
* time the particle was kicked.
*
* @param p The particle of interest
* @param p The particle of interest.
* @param xp The extended data of the particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_physical_internal_energy(const struct part *restrict p,
const struct xpart *restrict xp,
const struct cosmology *cosmo) {
return cosmo->a_factor_internal_energy * p->u;
return xp->u_full * cosmo->a_factor_internal_energy;
}
/**
* @brief Returns the comoving internal energy of a particle drifted to the
* current time.
*
* @param p The particle of interest
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_comoving_internal_energy(const struct part *restrict p) {
return p->u;
}
/**
* @brief Returns the physical internal energy of a particle drifted to the
* current time.
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_internal_energy(const struct part *restrict p,
const struct cosmology *cosmo) {
return p->u * cosmo->a_factor_internal_energy;
}
/**
......@@ -80,24 +112,57 @@ __attribute__((always_inline)) INLINE static float hydro_get_physical_pressure(
}
/**
* @brief Returns the comoving entropy of a particle
* @brief Returns the comoving entropy of a particle at the last
* time the particle was kicked.
*
* @param p The particle of interest
* @param p The particle of interest.
* @param xp The extended data of the particle of interest.
*/
__attribute__((always_inline)) INLINE static float hydro_get_comoving_entropy(
const struct part *restrict p) {
const struct part *restrict p, const struct xpart *restrict xp) {
return gas_entropy_from_internal_energy(p->rho, p->u);
return gas_entropy_from_internal_energy(p->rho, xp->u_full);
}
/**
* @brief Returns the physical entropy of a particle
* @brief Returns the physical entropy of a particle at the last
* time the particle was kicked.
*
* @param p The particle of interest
* @param p The particle of interest.
* @param xp The extended data of the particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float hydro_get_physical_entropy(
const struct part *restrict p, const struct cosmology *cosmo) {
const struct part *restrict p, const struct xpart *restrict xp,
const struct cosmology *cosmo) {
/* Note: no cosmological conversion required here with our choice of
* coordinates. */
return gas_entropy_from_internal_energy(p->rho, xp->u_full);
}
/**
* @brief Returns the comoving entropy of a particle drifted to the
* current time.
*
* @param p The particle of interest.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_comoving_entropy(const struct part *restrict p) {
return gas_entropy_from_internal_energy(p->rho, p->u);
}
/**
* @brief Returns the physical entropy of a particle drifted to the
* current time.
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_entropy(const struct part *restrict p,
const struct cosmology *cosmo) {
/* Note: no cosmological conversion required here with our choice of
* coordinates. */
......@@ -201,12 +266,27 @@ __attribute__((always_inline)) INLINE static void hydro_get_drifted_velocities(
*
* @param p The particle of interest
*/
__attribute__((always_inline)) INLINE static float hydro_get_internal_energy_dt(
const struct part *restrict p) {
__attribute__((always_inline)) INLINE static float
hydro_get_comoving_internal_energy_dt(const struct part *restrict p) {
return p->force.u_dt;
}
/**
* @brief Returns the time derivative of internal energy of a particle
*
* We assume a constant density.
*
* @param p The particle of interest
* @param cosmo Cosmology data structure
*/
__attribute__((always_inline)) INLINE static float
hydro_get_physical_internal_energy_dt(const struct part *restrict p,
const struct cosmology *cosmo) {
return p->force.u_dt * cosmo->a_factor_internal_energy;
}
/**
* @brief Returns the time derivative of internal energy of a particle
*
......@@ -215,12 +295,29 @@ __attribute__((always_inline)) INLINE static float hydro_get_internal_energy_dt(
* @param p The particle of interest.
* @param du_dt The new time derivative of the internal energy.
*/
__attribute__((always_inline)) INLINE static void hydro_set_internal_energy_dt(
struct part *restrict p, float du_dt) {
__attribute__((always_inline)) INLINE static void
hydro_set_comoving_internal_energy_dt(struct part *restrict p, float du_dt) {
p->force.u_dt = du_dt;
}
/**
* @brief Returns the time derivative of internal energy of a particle
*
* We assume a constant density.
*
* @param p The particle of interest.
* @param cosmo Cosmology data structure
* @param du_dt The new time derivative of the internal energy.
*/
__attribute__((always_inline)) INLINE static void
hydro_set_physical_internal_energy_dt(struct part *restrict p,
const struct cosmology *cosmo,
float du_dt) {
p->force.u_dt = du_dt * cosmo->a_factor_internal_energy;
}
/**
* @brief Computes the hydro time-step of a given particle
*
......
......@@ -55,6 +55,17 @@ INLINE static void hydro_read_particles(struct part* parts,
list[7] = io_make_input_field("Density", FLOAT, 1, OPTIONAL,
UNIT_CONV_DENSITY, parts, rho);
}
INLINE static void convert_S(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
ret[0] = hydro_get_comoving_entropy(p, xp);
}
INLINE static void convert_P(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
ret[0] = hydro_get_comoving_pressure(p);
}
INLINE static void convert_part_pos(const struct engine* e,
const struct part* p,
......@@ -128,7 +139,7 @@ INLINE static void hydro_write_particles(const struct part* parts,
struct io_props* list,
int* num_fields) {
*num_fields = 8;
*num_fields = 10;
/* List what we want to write */
list[0] = io_make_output_field_convert_part("Coordinates", DOUBLE, 3,
......@@ -146,7 +157,13 @@ INLINE static void hydro_write_particles(const struct part* parts,
UNIT_CONV_NO_UNITS, parts, id);
list[6] =
io_make_output_field("Density", FLOAT, 1, UNIT_CONV_DENSITY, parts, rho);
list[7] = io_make_output_field_convert_part("Potential", FLOAT, 1,
list[7] = io_make_output_field_convert_part("Entropy", FLOAT, 1,
UNIT_CONV_ENTROPY_PER_UNIT_MASS,
parts, xparts, convert_S);
list[8] = io_make_output_field_convert_part(
"Pressure", FLOAT, 1, UNIT_CONV_PRESSURE, parts, xparts, convert_P);
list[0] = io_make_output_field_convert_part("Potential", FLOAT, 1,
UNIT_CONV_POTENTIAL, parts,
xparts, convert_part_potential);
}
......
......@@ -730,6 +730,33 @@ hydro_get_physical_internal_energy(const struct part* restrict p,
hydro_get_comoving_internal_energy(p);
}
/**
* @brief Returns the comoving internal energy of a particle drifted to the
* current time.
*
* @param p The particle of interest
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_comoving_internal_energy(const struct part* restrict p) {
return hydro_get_comoving_internal_energy(p);
}
/**
* @brief Returns the physical internal energy of a particle drifted to the
* current time.
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_internal_energy(const struct part* restrict p,
const struct cosmology* cosmo) {
return hydro_get_comoving_internal_energy(p) *
cosmo->a_factor_internal_energy;
}
/**
* @brief Returns the comoving entropy of a particle
*
......@@ -759,6 +786,21 @@ __attribute__((always_inline)) INLINE static float hydro_get_physical_entropy(
return hydro_get_comoving_entropy(p);
}
/**
* @brief Returns the physical internal energy of a particle
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_entropy(const struct part* restrict p,
const struct cosmology* cosmo) {
/* Note: no cosmological conversion required here with our choice of
* coordinates. */
return hydro_get_comoving_entropy(p);
}
/**
* @brief Returns the sound speed of a particle
*
......
......@@ -816,6 +816,19 @@ hydro_get_physical_internal_energy(const struct part* restrict p,
hydro_get_comoving_internal_energy(p);
}
/**
* @brief Returns the physical internal energy of a particle
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_internal_energy(const struct part* restrict p,
const struct cosmology* cosmo) {
return hydro_get_physical_internal_energy(p, cosmo);
}
/**
* @brief Returns the comoving entropy of a particle
*
......@@ -845,6 +858,21 @@ __attribute__((always_inline)) INLINE static float hydro_get_physical_entropy(
return hydro_get_comoving_entropy(p);
}
/**
* @brief Returns the physical internal energy of a particle
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_entropy(const struct part* restrict p,
const struct cosmology* cosmo) {
/* Note: no cosmological conversion required here with our choice of
* coordinates. */
return hydro_get_comoving_entropy(p);
}
/**
* @brief Returns the sound speed of a particle
*
......
......@@ -336,6 +336,7 @@ hydro_set_physical_internal_energy_dt(struct part *restrict p,
p->u_dt = du_dt * cosmo->a_factor_internal_energy;
}
/**
* @brief Computes the hydro time-step of a given particle
*
......
......@@ -51,22 +51,26 @@
*/
/**
* @brief Returns the comoving internal energy of a particle
* @brief Returns the comoving internal energy of a particle at the last
* time the particle was kicked.
*
* For implementations where the main thermodynamic variable
* is not internal energy, this function computes the internal
* energy from the thermodynamic variable.
*
* @param p The particle of interest
* @param xp The extended data of the particle of interest.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_comoving_internal_energy(const struct part *restrict p) {
hydro_get_comoving_internal_energy(const struct part *restrict p,
const struct xpart *restrict xp) {
return p->u;
return xp->u_full;
}
/**
* @brief Returns the physical internal energy of a particle
* @brief Returns the physical internal energy of a particle at the last
* time the particle was kicked.
*
* For implementations where the main thermodynamic variable
* is not internal energy, this function computes the internal
......@@ -74,12 +78,40 @@ hydro_get_comoving_internal_energy(const struct part *restrict p) {
* physical coordinates.
*
* @param p The particle of interest.
* @param xp The extended data of the particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_physical_internal_energy(const struct part *restrict p,
const struct xpart *restrict xp,
const struct cosmology *cosmo) {
return xp->u_full * cosmo->a_factor_internal_energy;
}
/**
* @brief Returns the comoving internal energy of a particle drifted to the
* current time.
*
* @param p The particle of interest
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_comoving_internal_energy(const struct part *restrict p) {
return p->u;
}
/**
* @brief Returns the physical internal energy of a particle drifted to the
* current time.
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_internal_energy(const struct part *restrict p,
const struct cosmology *cosmo) {
return p->u * cosmo->a_factor_internal_energy;
}
......@@ -120,11 +152,12 @@ __attribute__((always_inline)) INLINE static float hydro_get_physical_pressure(
* the thermodynamic variable.
*
* @param p The particle of interest
* @param xp The extended data of the particle of interest.
*/
__attribute__((always_inline)) INLINE static float hydro_get_comoving_entropy(
const struct part *restrict p) {
const struct part *restrict p, const struct xpart *restrict xp) {
return gas_entropy_from_internal_energy(p->rho, p->u, p->mat_id);
return gas_entropy_from_internal_energy(p->rho, xp->u_full, p->mat_id);
}
/**
......@@ -136,10 +169,40 @@ __attribute__((always_inline)) INLINE static float hydro_get_comoving_entropy(
* physical coordinates.
*
* @param p The particle of interest
* @param xp The extended data of the particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float hydro_get_physical_entropy(
const struct part *restrict p, const struct cosmology *cosmo) {
const struct part *restrict p, const struct xpart *restrict xp,
const struct cosmology *cosmo) {
/* Note: no cosmological conversion required here with our choice of
* coordinates. */
return gas_entropy_from_internal_energy(p->rho, xp->u_full, p->mat_id);
}
/**
* @brief Returns the comoving entropy of a particle drifted to the
* current time.
*
* @param p The particle of interest.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_comoving_entropy(const struct part *restrict p) {
return gas_entropy_from_internal_energy(p->rho, p->u, p->mat_id);
}
/**
* @brief Returns the physical entropy of a particle drifted to the
* current time.
*
* @param p The particle of interest.
* @param cosmo The cosmological model.
*/
__attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_entropy(const struct part *restrict p,
const struct cosmology *cosmo) {
/* Note: no cosmological conversion required here with our choice of
* coordinates. */
......@@ -244,12 +307,27 @@ __attribute__((always_inline)) INLINE static void hydro_get_drifted_velocities(
*
* @param p The particle of interest
*/
__attribute__((always_inline)) INLINE static float hydro_get_internal_energy_dt(
const struct part *restrict p) {
__attribute__((always_inline)) INLINE static float
hydro_get_comoving_internal_energy_dt(const struct part *restrict p) {
return p->u_dt;
}
/**
* @brief Returns the time derivative of internal energy of a particle
*
* We assume a constant density.
*
* @param p The particle of interest
* @param cosmo Cosmology data structure
*/
__attribute__((always_inline)) INLINE static float
hydro_get_physical_internal_energy_dt(const struct part *restrict p,
const struct cosmology *cosmo) {
return p->u_dt * cosmo->a_factor_internal_energy;
}
/**
* @brief Returns the time derivative of internal energy of a particle
*
......@@ -258,12 +336,29 @@ __attribute__((always_inline)) INLINE static float hydro_get_internal_energy_dt(
* @param p The particle of interest.
* @param du_dt The new time derivative of the internal energy.
*/
__attribute__((always_inline)) INLINE static void hydro_set_internal_energy_dt(
struct part *restrict p, float du_dt) {
__attribute__((always_inline)) INLINE static void
hydro_set_comoving_internal_energy_dt(struct part *restrict p, float du_dt) {
p->u_dt = du_dt;
}
/**
* @brief Returns the time derivative of internal energy of a particle
*
* We assume a constant density.
*
* @param p The particle of interest.
* @param cosmo Cosmology data structure
* @param du_dt The new time derivative of the internal energy.
*/
__attribute__((always_inline)) INLINE static void
hydro_set_physical_internal_energy_dt(struct part *restrict p,
const struct cosmology *cosmo,
float du_dt) {
p->u_dt = du_dt * cosmo->a_factor_internal_energy;
}
/**
* @brief Computes the hydro time-step of a given particle
*
......
......@@ -76,7 +76,7 @@ INLINE static void hydro_read_particles(struct part* parts,
INLINE static void convert_S(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
ret[0] = hydro_get_comoving_entropy(p);
ret[0] = hydro_get_comoving_entropy(p, xp);
}
INLINE static void convert_P(const struct engine* e, const struct part* p,
......
......@@ -65,7 +65,7 @@ hydro_get_comoving_internal_energy(const struct part *restrict p,
*/
__attribute__((always_inline)) INLINE static float
hydro_get_physical_internal_energy(const struct part *restrict p,
const struct xpart *restrict xp,
const struct xpart *restrict xp,
const struct cosmology *cosmo) {
return gas_internal_energy_from_entropy(p->rho_bar * cosmo->a3_inv,
......@@ -94,7 +94,8 @@ __attribute__((always_inline)) INLINE static float
hydro_get_drifted_physical_internal_energy(const struct part *restrict p,
const struct cosmology *cosmo) {
return gas_internal_energy_from_entropy(p->rho_bar * cosmo->a3_inv, p->entropy);
return gas_internal_energy_from_entropy(p->rho_bar * cosmo->a3_inv,
p->entropy);
}
/**
......@@ -274,8 +275,8 @@ __attribute__((always_inline)) INLINE static void hydro_get_drifted_velocities(
*
* @param p The particle of interest
*/
__attribute__((always_inline)) INLINE static float hydro_get_comoving_internal_energy_dt(
const struct part *restrict p) {
__attribute__((always_inline)) INLINE static float
hydro_get_comoving_internal_energy_dt(const struct part *restrict p) {
return gas_internal_energy_from_entropy(p->rho_bar, p->entropy_dt);
}
......@@ -304,8 +305,8 @@ hydro_get_physical_internal_energy_dt(const struct part *restrict p,
* @param p The particle of interest.
* @param du_dt The new time derivative of the internal energy.
*/
__attribute__((always_inline)) INLINE static void hydro_set_comoving_internal_energy_dt(
struct part *restrict p, float du_dt) {
__attribute__((always_inline)) INLINE static void
hydro_set_comoving_internal_energy_dt(struct part *restrict p, float du_dt) {
p->entropy_dt = gas_entropy_from_internal_energy(p->rho_bar, du_dt);
}
......
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