From f53803f5e94e4dd0fe7f2c329014e0519b9a4dde Mon Sep 17 00:00:00 2001 From: Jacob Kegerreis <jacob.kegerreis@durham.ac.uk> Date: Sat, 2 May 2020 20:10:49 +0100 Subject: [PATCH] Add Tillotson basalt eos --- .../planetary/equation_of_state.h | 46 ++++++++++++++++++- src/equation_of_state/planetary/tillotson.h | 17 +++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/equation_of_state/planetary/equation_of_state.h b/src/equation_of_state/planetary/equation_of_state.h index 644167bb47..f547781f1e 100644 --- a/src/equation_of_state/planetary/equation_of_state.h +++ b/src/equation_of_state/planetary/equation_of_state.h @@ -80,6 +80,10 @@ enum eos_planetary_material_id { /*! Tillotson water */ eos_planetary_id_Til_water = eos_planetary_type_Til * eos_planetary_type_factor + 2, + + /*! Tillotson basalt */ + eos_planetary_id_Til_basalt = + eos_planetary_type_Til * eos_planetary_type_factor + 3, /* Hubbard & MacFarlane (1980) Uranus/Neptune */ @@ -123,7 +127,7 @@ enum eos_planetary_material_id { * @brief The parameters of the equation of state. */ struct eos_parameters { - struct Til_params Til_iron, Til_granite, Til_water; + struct Til_params Til_iron, Til_granite, Til_water, Til_basalt; struct HM80_params HM80_HHe, HM80_ice, HM80_rock; struct SESAME_params SESAME_iron, SESAME_basalt, SESAME_water, SS08_water; }; @@ -164,6 +168,11 @@ gas_internal_energy_from_entropy(float density, float entropy, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_internal_energy_from_entropy(density, entropy, + &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -265,6 +274,10 @@ __attribute__((always_inline)) INLINE static float gas_pressure_from_entropy( return Til_pressure_from_entropy(density, entropy, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_pressure_from_entropy(density, entropy, &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -364,6 +377,10 @@ __attribute__((always_inline)) INLINE static float gas_entropy_from_pressure( return Til_entropy_from_pressure(density, P, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_entropy_from_pressure(density, P, &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -459,6 +476,10 @@ __attribute__((always_inline)) INLINE static float gas_soundspeed_from_entropy( return Til_soundspeed_from_entropy(density, entropy, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_soundspeed_from_entropy(density, entropy, &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -557,6 +578,10 @@ gas_entropy_from_internal_energy(float density, float u, return Til_entropy_from_internal_energy(density, u, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_entropy_from_internal_energy(density, u, &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -657,6 +682,10 @@ gas_pressure_from_internal_energy(float density, float u, return Til_pressure_from_internal_energy(density, u, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_pressure_from_internal_energy(density, u, &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -760,6 +789,10 @@ gas_internal_energy_from_pressure(float density, float P, return Til_internal_energy_from_pressure(density, P, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_internal_energy_from_pressure(density, P, &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -861,6 +894,11 @@ gas_soundspeed_from_internal_energy(float density, float u, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_soundspeed_from_internal_energy(density, u, + &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -962,6 +1000,10 @@ __attribute__((always_inline)) INLINE static float gas_soundspeed_from_pressure( return Til_soundspeed_from_pressure(density, P, &eos.Til_water); break; + case eos_planetary_id_Til_basalt: + return Til_soundspeed_from_pressure(density, P, &eos.Til_basalt); + break; + default: error("Unknown material ID! mat_id = %d", mat_id); return 0.f; @@ -1051,10 +1093,12 @@ __attribute__((always_inline)) INLINE static void eos_init( set_Til_iron(&e->Til_iron, eos_planetary_id_Til_iron); set_Til_granite(&e->Til_granite, eos_planetary_id_Til_granite); set_Til_water(&e->Til_water, eos_planetary_id_Til_water); + set_Til_basalt(&e->Til_basalt, eos_planetary_id_Til_basalt); convert_units_Til(&e->Til_iron, us); convert_units_Til(&e->Til_granite, us); convert_units_Til(&e->Til_water, us); + convert_units_Til(&e->Til_basalt, us); } // Hubbard & MacFarlane (1980) diff --git a/src/equation_of_state/planetary/tillotson.h b/src/equation_of_state/planetary/tillotson.h index 9e2fa9dd9e..16a15f520e 100644 --- a/src/equation_of_state/planetary/tillotson.h +++ b/src/equation_of_state/planetary/tillotson.h @@ -81,6 +81,23 @@ INLINE static void set_Til_granite(struct Til_params *mat, mat->eta_zero = 0.0f; mat->P_min = 0.0f; } +INLINE static void set_Til_basalt(struct Til_params *mat, + enum eos_planetary_material_id mat_id) { + mat->mat_id = mat_id; + mat->rho_0 = 2700.0f; + mat->a = 0.5f; + mat->b = 1.5f; + mat->A = 2.67e10f; + mat->B = 2.67e10f; + mat->u_0 = 4.87e8f; + mat->u_iv = 4.72e6f; + mat->u_cv = 1.82e7f; + mat->alpha = 5.0f; + mat->beta = 5.0f; + mat->eta_min = 0.0f; + mat->eta_zero = 0.0f; + mat->P_min = 0.0f; +} INLINE static void set_Til_water(struct Til_params *mat, enum eos_planetary_material_id mat_id) { mat->mat_id = mat_id; -- GitLab