Commit c33df916 authored by Bert Vandenbroucke's avatar Bert Vandenbroucke
Browse files

Cleaned up Gizmo fixes. Added a hydro_timestep_extra method and added an empty...

Cleaned up Gizmo fixes. Added a hydro_timestep_extra method and added an empty version for all hydro schemes.
parent 3090ec1c
......@@ -148,6 +148,16 @@ __attribute__((always_inline)) INLINE static float hydro_compute_timestep(
return min(dt_cfl, dt_u_change);
}
/**
* @brief Does some extra hydro operations once the actual physical time step
* for the particle is known.
*
* @param p The particle to act upon.
* @param dt Physical time step of the particle during the next step.
*/
__attribute__((always_inline)) INLINE static void hydro_timestep_extra(
struct part *p, float dt) {}
/**
* @brief Prepares a particle for the density calculation.
*
......
......@@ -152,6 +152,16 @@ __attribute__((always_inline)) INLINE static float hydro_compute_timestep(
return dt_cfl;
}
/**
* @brief Does some extra hydro operations once the actual physical time step
* for the particle is known.
*
* @param p The particle to act upon.
* @param dt Physical time step of the particle during the next step.
*/
__attribute__((always_inline)) INLINE static void hydro_timestep_extra(
struct part *p, float dt) {}
/**
* @brief Prepares a particle for the density calculation.
*
......
......@@ -40,6 +40,27 @@ __attribute__((always_inline)) INLINE static float hydro_compute_timestep(
return CFL_condition * p->h / fabsf(p->timestepvars.vmax);
}
/**
* @brief Does some extra hydro operations once the actual physical time step
* for the particle is known.
*
* We use this to store the physical time step, since it is used for the flux
* exchange during the force loop.
*
* We also set the active flag of the particle to inactive. It will be set to
* active in hydro_init_part, which is called the next time the particle becomes
* active.
*
* @param p The particle to act upon.
* @param dt Physical time step of the particle during the next step.
*/
__attribute__((always_inline)) INLINE static void hydro_timestep_extra(
struct part* p, float dt) {
p->force.dt = dt;
p->force.active = 0;
}
/**
* @brief Initialises the particles for the first time
*
......@@ -89,6 +110,9 @@ __attribute__((always_inline)) INLINE static void hydro_init_part(
p->geometry.matrix_E[2][0] = 0.0f;
p->geometry.matrix_E[2][1] = 0.0f;
p->geometry.matrix_E[2][2] = 0.0f;
/* Set the active flag to active. */
p->force.active = 1;
}
/**
......@@ -178,10 +202,7 @@ __attribute__((always_inline)) INLINE static void hydro_end_density(
* @param timeBase Conversion factor between integer time and physical time.
*/
__attribute__((always_inline)) INLINE static void hydro_prepare_force(
struct part* restrict p, struct xpart* restrict xp, double timeBase) {
/* Set the physical time step */
p->force.dt = get_timestep(p->time_bin, timeBase); // MATTHIEU 0
struct part* restrict p, struct xpart* restrict xp) {
/* Initialize time step criterion variables */
p->timestepvars.vmax = 0.0f;
......@@ -375,7 +396,7 @@ __attribute__((always_inline)) INLINE static void hydro_end_force(
* @param half_dt Half the physical time step.
*/
__attribute__((always_inline)) INLINE static void hydro_kick_extra(
struct part* p, struct xpart* xp, float dt, integertime_t ti_current) {
struct part* p, struct xpart* xp, float dt) {
float oldm, oldp[3], anew[3];
const float half_dt = 0.5f * dt; // MATTHIEU
......@@ -429,9 +450,9 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
/* Store gravitational acceleration and mass flux for next step */
p->gravity.old_a[0] = anew[0];
p->gravity.old_a[1] = anew[1];
p->gravity.old_a[2] = anew[2];
p->gravity.old_mflux[0] = p->gravity.mflux[0];
p->gravity.old_a[1] = anew[1];
p->gravity.old_mflux[1] = p->gravity.mflux[1];
p->gravity.old_mflux[2] = p->gravity.mflux[2];
}
......@@ -444,8 +465,6 @@ __attribute__((always_inline)) INLINE static void hydro_kick_extra(
p->conserved.flux.momentum[1] = 0.0f;
p->conserved.flux.momentum[2] = 0.0f;
p->conserved.flux.energy = 0.0f;
p->force.ti_end = get_integer_time_end(ti_current, p->time_bin);
}
/**
......
......@@ -412,13 +412,7 @@ __attribute__((always_inline)) INLINE static void runner_iact_fluxes_common(
==> we update particle j if (MODE IS 1) OR (j IS INACTIVE)
*/
// MATTHIEU
// const integertime_t pj_ti_end = 0; // get_integer_time_end(pj->time_bin);
// const integertime_t pi_ti_end = 0; // get_integer_time_end(pi->time_bin);
integertime_t pi_ti_end = pi->force.ti_end;
integertime_t pj_ti_end = pj->force.ti_end;
if (mode == 1 || pj_ti_end > pi_ti_end) {
if (mode == 1 || pj->force.active == 0) {
/* Store mass flux */
mflux = dtj * Anorm * totflux[0];
pj->gravity.mflux[0] -= mflux * dx[0];
......
......@@ -178,8 +178,8 @@ struct part {
/* Physical time step of the particle. */
float dt;
/* Integer end time of the particle's time step. */
integertime_t ti_end;
/* Flag keeping track of whether this is an active or inactive particle. */
char active;
/* Actual velocity of the particle. */
float v_full[3];
......
......@@ -165,6 +165,16 @@ __attribute__((always_inline)) INLINE static float hydro_compute_timestep(
return dt_cfl;
}
/**
* @brief Does some extra hydro operations once the actual physical time step
* for the particle is known.
*
* @param p The particle to act upon.
* @param dt Physical time step of the particle during the next step.
*/
__attribute__((always_inline)) INLINE static void hydro_timestep_extra(
struct part *p, float dt) {}
/**
* @brief Prepares a particle for the density calculation.
*
......
......@@ -152,6 +152,16 @@ __attribute__((always_inline)) INLINE static float hydro_compute_timestep(
return dt_cfl;
}
/**
* @brief Does some extra hydro operations once the actual physical time step
* for the particle is known.
*
* @param p The particle to act upon.
* @param dt Physical time step of the particle during the next step.
*/
__attribute__((always_inline)) INLINE static void hydro_timestep_extra(
struct part *p, float dt) {}
/**
* @brief Prepares a particle for the density calculation.
*
......
......@@ -107,7 +107,7 @@ __attribute__((always_inline)) INLINE static void kick_part(
}
/* Extra kick work */
hydro_kick_extra(p, xp, dt, ti_end);
hydro_kick_extra(p, xp, dt);
if (p->gpart != NULL) gravity_kick_extra(p->gpart, dt);
}
......
......@@ -599,8 +599,6 @@ void runner_do_ghost(struct runner *r, struct cell *c, int timer) {
target_wcount - e->hydro_properties->delta_neighbours;
const int max_smoothing_iter = e->hydro_properties->max_smoothing_iterations;
int redo = 0, count = 0;
const double timeBase = e->timeBase;
integertime_t ti_current = e->ti_current;
TIMER_TIC;
......@@ -681,7 +679,7 @@ void runner_do_ghost(struct runner *r, struct cell *c, int timer) {
/* As of here, particle force variables will be set. */
/* Compute variables required for the force loop */
hydro_prepare_force(p, xp, ti_current, timeBase);
hydro_prepare_force(p, xp);
/* The particle force values are now set. Do _NOT_
try to read any particle density variables! */
......@@ -1098,6 +1096,7 @@ void runner_do_timestep(struct runner *r, struct cell *c, int timer) {
struct xpart *restrict xparts = c->xparts;
struct gpart *restrict gparts = c->gparts;
struct spart *restrict sparts = c->sparts;
const double timeBase = e->timeBase;
TIMER_TIC;
......@@ -1133,6 +1132,10 @@ void runner_do_timestep(struct runner *r, struct cell *c, int timer) {
p->time_bin = get_time_bin(ti_new_step);
if (p->gpart != NULL) p->gpart->time_bin = get_time_bin(ti_new_step);
/* Tell the particle what the new physical time step is */
float dt = get_timestep(p->time_bin, timeBase);
hydro_timestep_extra(p, dt);
/* Number of updated particles */
updated++;
if (p->gpart != NULL) g_updated++;
......
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