diff --git a/src/equation_of_state/planetary/tillotson.h b/src/equation_of_state/planetary/tillotson.h index 609cc8dcb33e6533f68e13430f6654832af4d0a5..b748ed6e254626584b111e76f04c63fafe62b419 100644 --- a/src/equation_of_state/planetary/tillotson.h +++ b/src/equation_of_state/planetary/tillotson.h @@ -41,7 +41,8 @@ // Tillotson parameters struct Til_params { - float rho_0, a, b, A, B, u_0, u_iv, u_cv, alpha, beta, eta_min, P_min; + float rho_0, a, b, A, B, u_0, u_iv, u_cv, alpha, beta, eta_min, eta_zero, + P_min; enum eos_planetary_material_id mat_id; }; @@ -60,6 +61,7 @@ INLINE static void set_Til_iron(struct Til_params *mat, 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_granite(struct Til_params *mat, @@ -76,6 +78,7 @@ INLINE static void set_Til_granite(struct Til_params *mat, 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, @@ -91,7 +94,8 @@ INLINE static void set_Til_water(struct Til_params *mat, mat->u_cv = 2.69e9f; mat->alpha = 10.0f; mat->beta = 5.0f; - mat->eta_min = 0.9f; + mat->eta_min = 0.925f; + mat->eta_zero = 0.875f; mat->P_min = 0.0f; } @@ -177,11 +181,13 @@ INLINE static float Til_pressure_from_internal_energy( float P_c, P_e, P; // Condensed or cold - if (eta < mat->eta_min) { + P_c = (mat->a + mat->b * w_inv) * density * u + mat->A * mu + + mat->B * mu * mu; + if (eta < mat->eta_zero) { P_c = 0.f; - } else { - P_c = (mat->a + mat->b * w_inv) * density * u + mat->A * mu + - mat->B * mu * mu; + } + else if (eta < mat->eta_min) { + P_c *= (eta - mat->eta_zero) / (mat->eta_min - mat->eta_zero); } // Expanded and hot P_e = mat->a * density * u + @@ -237,11 +243,13 @@ INLINE static float Til_soundspeed_from_internal_energy( float P_c, P_e, c_sq_c, c_sq_e, c_sq; // Condensed or cold - if (eta < mat->eta_min) { + P_c = (mat->a + mat->b * w_inv) * density * u + mat->A * mu + + mat->B * mu * mu; + if (eta < mat->eta_zero) { P_c = 0.f; - } else { - P_c = (mat->a + mat->b * w_inv) * density * u + mat->A * mu + - mat->B * mu * mu; + } + else if (eta < mat->eta_min) { + P_c *= (eta - mat->eta_zero) / (mat->eta_min - mat->eta_zero); } c_sq_c = P_c * rho_inv * (1.f + mat->a + mat->b * w_inv) + mat->b * (w - 1.f) * w_inv_sq * (2.f * u - P_c * rho_inv) +