Commit 259be318 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Also update the other hydro schemes to use the newly defined functions.

parent 79b0d507
...@@ -160,6 +160,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass( ...@@ -160,6 +160,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass(
return p->mass; return p->mass;
} }
/**
* @brief Sets the mass of a particle
*
* @param p The particle of interest
* @param m The mass to set.
*/
__attribute__((always_inline)) INLINE static void hydro_set_mass(
struct part *restrict p, float m) {
p->mass = m;
}
/** /**
* @brief Returns the velocities drifted to the current time of a particle. * @brief Returns the velocities drifted to the current time of a particle.
* *
...@@ -500,9 +512,12 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra( ...@@ -500,9 +512,12 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
* Requires the density to be known * Requires the density to be known
* *
* @param p The particle to act upon * @param p The particle to act upon
* @param xp The extended data.
* @param cosmo The cosmological model.
*/ */
__attribute__((always_inline)) INLINE static void hydro_convert_quantities( __attribute__((always_inline)) INLINE static void hydro_convert_quantities(
struct part *restrict p, struct xpart *restrict xp) {} struct part *restrict p, struct xpart *restrict xp,
const struct cosmology *cosmo) {}
/** /**
* @brief Initialises the particles for the first time * @brief Initialises the particles for the first time
...@@ -529,4 +544,21 @@ __attribute__((always_inline)) INLINE static void hydro_first_init_part( ...@@ -529,4 +544,21 @@ __attribute__((always_inline)) INLINE static void hydro_first_init_part(
hydro_init_part(p, NULL); hydro_init_part(p, NULL);
} }
/**
* @brief Overwrite the initial internal energy of a particle.
*
* Note that in the cases where the thermodynamic variable is not
* internal energy but gets converted later, we must overwrite that
* field. The conversion to the actual variable happens later after
* the initial fake time-step.
*
* @param p The #part to write to.
* @param u_init The new initial internal energy.
*/
__attribute__((always_inline)) INLINE static void
hydro_set_init_internal_energy(struct part *p, float u_init) {
p->u = u_init;
}
#endif /* SWIFT_DEFAULT_HYDRO_H */ #endif /* SWIFT_DEFAULT_HYDRO_H */
...@@ -54,7 +54,7 @@ void hydro_read_particles(struct part* parts, struct io_props* list, ...@@ -54,7 +54,7 @@ void hydro_read_particles(struct part* parts, struct io_props* list,
} }
void convert_part_pos(const struct engine* e, const struct part* p, void convert_part_pos(const struct engine* e, const struct part* p,
double* ret) { const struct xpart* xp, double* ret) {
if (e->s->periodic) { if (e->s->periodic) {
ret[0] = box_wrap(p->x[0], 0.0, e->s->dim[0]); ret[0] = box_wrap(p->x[0], 0.0, e->s->dim[0]);
...@@ -67,6 +67,40 @@ void convert_part_pos(const struct engine* e, const struct part* p, ...@@ -67,6 +67,40 @@ void convert_part_pos(const struct engine* e, const struct part* p,
} }
} }
void convert_part_vel(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
const int with_cosmology = (e->policy & engine_policy_cosmology);
const struct cosmology* cosmo = e->cosmology;
const integertime_t ti_current = e->ti_current;
const double time_base = e->time_base;
const integertime_t ti_beg = get_integer_time_begin(ti_current, p->time_bin);
const integertime_t ti_end = get_integer_time_end(ti_current, p->time_bin);
/* Get time-step since the last kick */
float dt_kick_grav, dt_kick_hydro;
if (with_cosmology) {
dt_kick_grav = cosmology_get_grav_kick_factor(cosmo, ti_beg, ti_current);
dt_kick_grav -=
cosmology_get_grav_kick_factor(cosmo, ti_beg, (ti_beg + ti_end) / 2);
dt_kick_hydro = cosmology_get_hydro_kick_factor(cosmo, ti_beg, ti_current);
dt_kick_hydro -=
cosmology_get_hydro_kick_factor(cosmo, ti_beg, (ti_beg + ti_end) / 2);
} else {
dt_kick_grav = (ti_current - ((ti_beg + ti_end) / 2)) * time_base;
dt_kick_hydro = (ti_current - ((ti_beg + ti_end) / 2)) * time_base;
}
/* Extrapolate the velocites to the current time */
hydro_get_drifted_velocities(p, xp, dt_kick_hydro, dt_kick_grav, ret);
/* Conversion from internal units to peculiar velocities */
ret[0] *= cosmo->a2_inv;
ret[1] *= cosmo->a2_inv;
ret[2] *= cosmo->a2_inv;
}
/** /**
* @brief Specifies which particle fields to write to a dataset * @brief Specifies which particle fields to write to a dataset
* *
...@@ -74,16 +108,17 @@ void convert_part_pos(const struct engine* e, const struct part* p, ...@@ -74,16 +108,17 @@ void convert_part_pos(const struct engine* e, const struct part* p,
* @param list The list of i/o properties to write. * @param list The list of i/o properties to write.
* @param num_fields The number of i/o fields to write. * @param num_fields The number of i/o fields to write.
*/ */
void hydro_write_particles(struct part* parts, struct io_props* list, void hydro_write_particles(const struct part* parts, const struct xpart* xparts,
int* num_fields) { struct io_props* list, int* num_fields) {
*num_fields = 7; *num_fields = 7;
/* List what we want to write */ /* List what we want to write */
list[0] = io_make_output_field_convert_part( list[0] = io_make_output_field_convert_part("Coordinates", DOUBLE, 3,
"Coordinates", DOUBLE, 3, UNIT_CONV_LENGTH, parts, convert_part_pos); UNIT_CONV_LENGTH, parts, xparts,
list[1] = convert_part_pos);
io_make_output_field("Velocities", FLOAT, 3, UNIT_CONV_SPEED, parts, v); list[1] = io_make_output_field_convert_part(
"Velocities", FLOAT, 3, UNIT_CONV_SPEED, parts, xparts, convert_part_vel);
list[2] = list[2] =
io_make_output_field("Masses", FLOAT, 1, UNIT_CONV_MASS, parts, mass); io_make_output_field("Masses", FLOAT, 1, UNIT_CONV_MASS, parts, mass);
list[3] = io_make_output_field("SmoothingLength", FLOAT, 1, UNIT_CONV_LENGTH, list[3] = io_make_output_field("SmoothingLength", FLOAT, 1, UNIT_CONV_LENGTH,
......
...@@ -170,6 +170,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass( ...@@ -170,6 +170,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass(
return p->mass; return p->mass;
} }
/**
* @brief Sets the mass of a particle
*
* @param p The particle of interest
* @param m The mass to set.
*/
__attribute__((always_inline)) INLINE static void hydro_set_mass(
struct part *restrict p, float m) {
p->mass = m;
}
/** /**
* @brief Returns the velocities drifted to the current time of a particle. * @brief Returns the velocities drifted to the current time of a particle.
* *
......
...@@ -517,7 +517,7 @@ __attribute__((always_inline)) INLINE static void hydro_reset_predicted_values( ...@@ -517,7 +517,7 @@ __attribute__((always_inline)) INLINE static void hydro_reset_predicted_values(
* @param p The particle to act upon. * @param p The particle to act upon.
*/ */
__attribute__((always_inline)) INLINE static void hydro_convert_quantities( __attribute__((always_inline)) INLINE static void hydro_convert_quantities(
struct part* p, struct xpart* xp) {} struct part* p, struct xpart* xp, const struct cosmology* cosmo) {}
/** /**
* @brief Extra operations to be done during the drift * @brief Extra operations to be done during the drift
...@@ -812,6 +812,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass( ...@@ -812,6 +812,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass(
return p->conserved.mass; return p->conserved.mass;
} }
/**
* @brief Sets the mass of a particle
*
* @param p The particle of interest
* @param m The mass to set.
*/
__attribute__((always_inline)) INLINE static void hydro_set_mass(
struct part* restrict p, float m) {
p->conserved.mass = m;
}
/** /**
* @brief Returns the velocities drifted to the current time of a particle. * @brief Returns the velocities drifted to the current time of a particle.
* *
...@@ -917,4 +929,29 @@ __attribute__((always_inline)) INLINE static void hydro_set_entropy( ...@@ -917,4 +929,29 @@ __attribute__((always_inline)) INLINE static void hydro_set_entropy(
p->primitives.P = S * pow_gamma(p->primitives.rho); p->primitives.P = S * pow_gamma(p->primitives.rho);
} }
/**
* @brief Overwrite the initial internal energy of a particle.
*
* Note that in the cases where the thermodynamic variable is not
* internal energy but gets converted later, we must overwrite that
* field. The conversion to the actual variable happens later after
* the initial fake time-step.
*
* @param p The #part to write to.
* @param u_init The new initial internal energy.
*/
__attribute__((always_inline)) INLINE static void
hydro_set_init_internal_energy(struct part* p, float u_init) {
p->conserved.energy = u_init * p->conserved.mass;
#ifdef GIZMO_TOTAL_ENERGY
/* add the kinetic energy */
p->conserved.energy += 0.5f * p->conserved.mass *
(p->conserved.momentum[0] * p->primitives.v[0] +
p->conserved.momentum[1] * p->primitives.v[1] +
p->conserved.momentum[2] * p->primitives.v[2]);
#endif
p->primitives.P = hydro_gamma_minus_one * p->primitives.rho * u_init;
}
#endif /* SWIFT_GIZMO_HYDRO_H */ #endif /* SWIFT_GIZMO_HYDRO_H */
...@@ -72,7 +72,8 @@ void hydro_read_particles(struct part* parts, struct io_props* list, ...@@ -72,7 +72,8 @@ void hydro_read_particles(struct part* parts, struct io_props* list,
* @param p Particle. * @param p Particle.
* @param ret (return) Internal energy of the particle * @param ret (return) Internal energy of the particle
*/ */
void convert_u(const struct engine* e, const struct part* p, float* ret) { void convert_u(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
ret[0] = hydro_get_comoving_internal_energy(p); ret[0] = hydro_get_comoving_internal_energy(p);
} }
...@@ -84,7 +85,8 @@ void convert_u(const struct engine* e, const struct part* p, float* ret) { ...@@ -84,7 +85,8 @@ void convert_u(const struct engine* e, const struct part* p, float* ret) {
* @param p Particle. * @param p Particle.
* @param ret (return) Entropic function of the particle * @param ret (return) Entropic function of the particle
*/ */
void convert_A(const struct engine* e, const struct part* p, float* ret) { void convert_A(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);
} }
...@@ -95,7 +97,8 @@ void convert_A(const struct engine* e, const struct part* p, float* ret) { ...@@ -95,7 +97,8 @@ void convert_A(const struct engine* e, const struct part* p, float* ret) {
* @param p Particle. * @param p Particle.
* @return Total energy of the particle * @return Total energy of the particle
*/ */
void convert_Etot(const struct engine* e, const struct part* p, float* ret) { void convert_Etot(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
#ifdef GIZMO_TOTAL_ENERGY #ifdef GIZMO_TOTAL_ENERGY
ret[0] = p->conserved.energy; ret[0] = p->conserved.energy;
#else #else
...@@ -110,7 +113,7 @@ void convert_Etot(const struct engine* e, const struct part* p, float* ret) { ...@@ -110,7 +113,7 @@ void convert_Etot(const struct engine* e, const struct part* p, float* ret) {
} }
void convert_part_pos(const struct engine* e, const struct part* p, void convert_part_pos(const struct engine* e, const struct part* p,
double* ret) { const struct xpart* xp, double* ret) {
if (e->s->periodic) { if (e->s->periodic) {
ret[0] = box_wrap(p->x[0], 0.0, e->s->dim[0]); ret[0] = box_wrap(p->x[0], 0.0, e->s->dim[0]);
...@@ -123,6 +126,40 @@ void convert_part_pos(const struct engine* e, const struct part* p, ...@@ -123,6 +126,40 @@ void convert_part_pos(const struct engine* e, const struct part* p,
} }
} }
void convert_part_vel(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
const int with_cosmology = (e->policy & engine_policy_cosmology);
const struct cosmology* cosmo = e->cosmology;
const integertime_t ti_current = e->ti_current;
const double time_base = e->time_base;
const integertime_t ti_beg = get_integer_time_begin(ti_current, p->time_bin);
const integertime_t ti_end = get_integer_time_end(ti_current, p->time_bin);
/* Get time-step since the last kick */
float dt_kick_grav, dt_kick_hydro;
if (with_cosmology) {
dt_kick_grav = cosmology_get_grav_kick_factor(cosmo, ti_beg, ti_current);
dt_kick_grav -=
cosmology_get_grav_kick_factor(cosmo, ti_beg, (ti_beg + ti_end) / 2);
dt_kick_hydro = cosmology_get_hydro_kick_factor(cosmo, ti_beg, ti_current);
dt_kick_hydro -=
cosmology_get_hydro_kick_factor(cosmo, ti_beg, (ti_beg + ti_end) / 2);
} else {
dt_kick_grav = (ti_current - ((ti_beg + ti_end) / 2)) * time_base;
dt_kick_hydro = (ti_current - ((ti_beg + ti_end) / 2)) * time_base;
}
/* Extrapolate the velocites to the current time */
hydro_get_drifted_velocities(p, xp, dt_kick_hydro, dt_kick_grav, ret);
/* Conversion from internal units to peculiar velocities */
ret[0] *= cosmo->a2_inv;
ret[1] *= cosmo->a2_inv;
ret[2] *= cosmo->a2_inv;
}
/** /**
* @brief Specifies which particle fields to write to a dataset * @brief Specifies which particle fields to write to a dataset
* *
...@@ -130,33 +167,35 @@ void convert_part_pos(const struct engine* e, const struct part* p, ...@@ -130,33 +167,35 @@ void convert_part_pos(const struct engine* e, const struct part* p,
* @param list The list of i/o properties to write. * @param list The list of i/o properties to write.
* @param num_fields The number of i/o fields to write. * @param num_fields The number of i/o fields to write.
*/ */
void hydro_write_particles(struct part* parts, struct io_props* list, void hydro_write_particles(const struct part* parts, const struct xpart* xparts,
int* num_fields) { struct io_props* list, int* num_fields) {
*num_fields = 10; *num_fields = 10;
/* List what we want to write */ /* List what we want to write */
list[0] = io_make_output_field_convert_part( list[0] = io_make_output_field_convert_part("Coordinates", DOUBLE, 3,
"Coordinates", DOUBLE, 3, UNIT_CONV_LENGTH, parts, convert_part_pos); UNIT_CONV_LENGTH, parts, xparts,
list[1] = io_make_output_field("Velocities", FLOAT, 3, UNIT_CONV_SPEED, parts, convert_part_pos);
primitives.v); list[1] = io_make_output_field_convert_part(
"Velocities", FLOAT, 3, UNIT_CONV_SPEED, parts, xparts, convert_part_vel);
list[2] = io_make_output_field("Masses", FLOAT, 1, UNIT_CONV_MASS, parts, list[2] = io_make_output_field("Masses", FLOAT, 1, UNIT_CONV_MASS, parts,
conserved.mass); conserved.mass);
list[3] = io_make_output_field("SmoothingLength", FLOAT, 1, UNIT_CONV_LENGTH, list[3] = io_make_output_field("SmoothingLength", FLOAT, 1, UNIT_CONV_LENGTH,
parts, h); parts, h);
list[4] = io_make_output_field_convert_part("InternalEnergy", FLOAT, 1, list[4] = io_make_output_field_convert_part("InternalEnergy", FLOAT, 1,
UNIT_CONV_ENERGY_PER_UNIT_MASS, UNIT_CONV_ENERGY_PER_UNIT_MASS,
parts, convert_u); parts, xparts, convert_u);
list[5] = io_make_output_field("ParticleIDs", ULONGLONG, 1, list[5] = io_make_output_field("ParticleIDs", ULONGLONG, 1,
UNIT_CONV_NO_UNITS, parts, id); UNIT_CONV_NO_UNITS, parts, id);
list[6] = io_make_output_field("Density", FLOAT, 1, UNIT_CONV_DENSITY, parts, list[6] = io_make_output_field("Density", FLOAT, 1, UNIT_CONV_DENSITY, parts,
primitives.rho); primitives.rho);
list[7] = io_make_output_field_convert_part( list[7] = io_make_output_field_convert_part(
"Entropy", FLOAT, 1, UNIT_CONV_ENTROPY, parts, convert_A); "Entropy", FLOAT, 1, UNIT_CONV_ENTROPY, parts, xparts, convert_A);
list[8] = io_make_output_field("Pressure", FLOAT, 1, UNIT_CONV_PRESSURE, list[8] = io_make_output_field("Pressure", FLOAT, 1, UNIT_CONV_PRESSURE,
parts, primitives.P); parts, primitives.P);
list[9] = io_make_output_field_convert_part( list[9] = io_make_output_field_convert_part(
"TotEnergy", FLOAT, 1, UNIT_CONV_ENERGY, parts, convert_Etot); "TotEnergy", FLOAT, 1, UNIT_CONV_ENERGY, parts, xparts, convert_Etot);
} }
/** /**
......
...@@ -197,6 +197,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass( ...@@ -197,6 +197,18 @@ __attribute__((always_inline)) INLINE static float hydro_get_mass(
return p->mass; return p->mass;
} }
/**
* @brief Sets the mass of a particle
*
* @param p The particle of interest
* @param m The mass to set.
*/
__attribute__((always_inline)) INLINE static void hydro_set_mass(
struct part *restrict p, float m) {
p->mass = m;
}
/** /**
* @brief Returns the velocities drifted to the current time of a particle. * @brief Returns the velocities drifted to the current time of a particle.
* *
...@@ -540,9 +552,11 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra( ...@@ -540,9 +552,11 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
* *
* @param p The particle to act upon * @param p The particle to act upon
* @param xp The extended particle to act upon * @param xp The extended particle to act upon
* @param cosmo The cosmological model.
*/ */
__attribute__((always_inline)) INLINE static void hydro_convert_quantities( __attribute__((always_inline)) INLINE static void hydro_convert_quantities(
struct part *restrict p, struct xpart *restrict xp) { struct part *restrict p, struct xpart *restrict xp,
const struct cosmology *cosmo) {
/* Compute the pressure */ /* Compute the pressure */
const float pressure = gas_pressure_from_internal_energy(p->rho, p->u); const float pressure = gas_pressure_from_internal_energy(p->rho, p->u);
...@@ -580,4 +594,21 @@ __attribute__((always_inline)) INLINE static void hydro_first_init_part( ...@@ -580,4 +594,21 @@ __attribute__((always_inline)) INLINE static void hydro_first_init_part(
hydro_init_part(p, NULL); hydro_init_part(p, NULL);
} }
/**
* @brief Overwrite the initial internal energy of a particle.
*
* Note that in the cases where the thermodynamic variable is not
* internal energy but gets converted later, we must overwrite that
* field. The conversion to the actual variable happens later after
* the initial fake time-step.
*
* @param p The #part to write to.
* @param u_init The new initial internal energy.
*/
__attribute__((always_inline)) INLINE static void
hydro_set_init_internal_energy(struct part *p, float u_init) {
p->u = u_init;
}
#endif /* SWIFT_MINIMAL_HYDRO_H */ #endif /* SWIFT_MINIMAL_HYDRO_H */
...@@ -69,18 +69,20 @@ void hydro_read_particles(struct part* parts, struct io_props* list, ...@@ -69,18 +69,20 @@ void hydro_read_particles(struct part* parts, struct io_props* list,
UNIT_CONV_DENSITY, parts, rho); UNIT_CONV_DENSITY, parts, rho);
} }
void convert_S(const struct engine* e, const struct part* p, float* ret) { 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);
} }
void convert_P(const struct engine* e, const struct part* p, float* ret) { void convert_P(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
ret[0] = hydro_get_comoving_pressure(p); ret[0] = hydro_get_comoving_pressure(p);
} }
void convert_part_pos(const struct engine* e, const struct part* p, void convert_part_pos(const struct engine* e, const struct part* p,
double* ret) { const struct xpart* xp, double* ret) {
if (e->s->periodic) { if (e->s->periodic) {
ret[0] = box_wrap(p->x[0], 0.0, e->s->dim[0]); ret[0] = box_wrap(p->x[0], 0.0, e->s->dim[0]);
...@@ -93,23 +95,59 @@ void convert_part_pos(const struct engine* e, const struct part* p, ...@@ -93,23 +95,59 @@ void convert_part_pos(const struct engine* e, const struct part* p,
} }
} }
void convert_part_vel(const struct engine* e, const struct part* p,
const struct xpart* xp, float* ret) {
const int with_cosmology = (e->policy & engine_policy_cosmology);
const struct cosmology* cosmo = e->cosmology;
const integertime_t ti_current = e->ti_current;
const double time_base = e->time_base;
const integertime_t ti_beg = get_integer_time_begin(ti_current, p->time_bin);
const integertime_t ti_end = get_integer_time_end(ti_current, p->time_bin);
/* Get time-step since the last kick */
float dt_kick_grav, dt_kick_hydro;
if (with_cosmology) {
dt_kick_grav = cosmology_get_grav_kick_factor(cosmo, ti_beg, ti_current);
dt_kick_grav -=
cosmology_get_grav_kick_factor(cosmo, ti_beg, (ti_beg + ti_end) / 2);
dt_kick_hydro = cosmology_get_hydro_kick_factor(cosmo, ti_beg, ti_current);
dt_kick_hydro -=
cosmology_get_hydro_kick_factor(cosmo, ti_beg, (ti_beg + ti_end) / 2);
} else {
dt_kick_grav = (ti_current - ((ti_beg + ti_end) / 2)) * time_base;
dt_kick_hydro = (ti_current - ((ti_beg + ti_end) / 2)) * time_base;
}
/* Extrapolate the velocites to the current time */
hydro_get_drifted_velocities(p, xp, dt_kick_hydro, dt_kick_grav, ret);
/* Conversion from internal units to peculiar velocities */
ret[0] *= cosmo->a2_inv;
ret[1] *= cosmo->a2_inv;
ret[2] *= cosmo->a2_inv;
}
/** /**
* @brief Specifies which particle fields to write to a dataset * @brief Specifies which particle fields to write to a dataset
* *
* @param parts The particle array. * @param parts The particle array.
* @param xparts The extended particle array.
* @param list The list of i/o properties to write. * @param list The list of i/o properties to write.
* @param num_fields The number of i/o fields to write. * @param num_fields The number of i/o fields to write.
*/ */
void hydro_write_particles(struct part* parts, struct io_props* list, void hydro_write_particles(const struct part* parts, const struct xpart* xparts,
int* num_fields) { struct io_props* list, int* num_fields) {
*num_fields = 9; *num_fields = 9;
/* List what we want to write */ /* List what we want to write */
list[0] = io_make_output_field_convert_part( list[0] = io_make_output_field_convert_part("Coordinates", DOUBLE, 3,
"Coordinates", DOUBLE, 3, UNIT_CONV_LENGTH, parts, convert_part_pos); UNIT_CONV_LENGTH, parts, xparts,
list[1] = convert_part_pos);
io_make_output_field("Velocities", FLOAT, 3, UNIT_CONV_SPEED, parts, v); list[1] = io_make_output_field_convert_part(
"Velocities", FLOAT, 3, UNIT_CONV_SPEED, parts, xparts, convert_part_vel);
list[2] = list[2] =
io_make_output_field("Masses", FLOAT, 1, UNIT_CONV_MASS, parts, mass); io_make_output_field("Masses", FLOAT, 1, UNIT_CONV_MASS, parts, mass);
list[3] = io_make_output_field("SmoothingLength", FLOAT, 1, UNIT_CONV_LENGTH, list[3] = io_make_output_field("SmoothingLength", FLOAT, 1, UNIT_CONV_LENGTH,
...@@ -120,10 +158,11 @@ void hydro_write_particles(struct part* parts, struct io_props* list, ...@@ -120,10 +158,11 @@ void hydro_write_particles(struct part* parts, struct io_props* list,
UNIT_CONV_NO_UNITS, parts, id); UNIT_CONV_NO_UNITS, parts, id);
list[6] = list[6] =
io_make_output_field("Density", FLOAT, 1, UNIT_CONV_DENSITY, parts, rho); io_make_output_field("Density", FLOAT, 1, UNIT_CONV_DENSITY, parts, rho);
list[7] = io_make_output_field_convert_part( list[7] = io_make_output_field_convert_part("Entropy", FLOAT, 1,
"Entropy", FLOAT, 1, UNIT_CONV_ENTROPY_PER_UNIT_MASS, parts, convert_S); UNIT_CONV_ENTROPY_PER_UNIT_MASS,