20#ifndef SWIFT_ADIABATIC_INDEX_H
21#define SWIFT_ADIABATIC_INDEX_H
41#if defined(HYDRO_GAMMA_5_3)
43#define hydro_gamma 1.66666666666666667f
44#define hydro_gamma_minus_one 0.66666666666666667f
45#define hydro_gamma_plus_one 2.66666666666666667f
46#define hydro_one_over_gamma_minus_one 1.5f
47#define hydro_gamma_plus_one_over_two_gamma 0.8f
48#define hydro_gamma_minus_one_over_two_gamma 0.2f
49#define hydro_gamma_minus_one_over_gamma_plus_one 0.25f
50#define hydro_two_over_gamma_plus_one 0.75f
51#define hydro_two_over_gamma_minus_one 3.f
52#define hydro_gamma_minus_one_over_two 0.33333333333333333f
53#define hydro_two_gamma_over_gamma_minus_one 5.f
54#define hydro_one_over_gamma 0.6f
56#elif defined(HYDRO_GAMMA_7_5)
58#define hydro_gamma 1.4f
59#define hydro_gamma_minus_one 0.4f
60#define hydro_gamma_plus_one 2.4f
61#define hydro_one_over_gamma_minus_one 2.5f
62#define hydro_gamma_plus_one_over_two_gamma 0.857142857f
63#define hydro_gamma_minus_one_over_two_gamma 0.142857143f
64#define hydro_gamma_minus_one_over_gamma_plus_one 0.166666667f
65#define hydro_two_over_gamma_plus_one 0.833333333
66#define hydro_two_over_gamma_minus_one 5.f
67#define hydro_gamma_minus_one_over_two 0.2f
68#define hydro_two_gamma_over_gamma_minus_one 7.f
69#define hydro_one_over_gamma 0.714285714f
71#elif defined(HYDRO_GAMMA_4_3)
73#define hydro_gamma 1.33333333333333333f
74#define hydro_gamma_minus_one 0.33333333333333333f
75#define hydro_gamma_plus_one 2.33333333333333333f
76#define hydro_one_over_gamma_minus_one 3.f
77#define hydro_gamma_plus_one_over_two_gamma 0.875f
78#define hydro_gamma_minus_one_over_two_gamma 0.125f
79#define hydro_gamma_minus_one_over_gamma_plus_one 0.142857143f
80#define hydro_two_over_gamma_plus_one 0.857142857f
81#define hydro_two_over_gamma_minus_one 6.f
82#define hydro_gamma_minus_one_over_two 0.166666666666666666f
83#define hydro_two_gamma_over_gamma_minus_one 8.f
84#define hydro_one_over_gamma 0.75f
86#elif defined(HYDRO_GAMMA_2_1)
88#define hydro_gamma 2.f
89#define hydro_gamma_minus_one 1.f
90#define hydro_gamma_plus_one 3.f
91#define hydro_one_over_gamma_minus_one 1.f
92#define hydro_gamma_plus_one_over_two_gamma 0.75f
93#define hydro_gamma_minus_one_over_two_gamma 0.25f
94#define hydro_gamma_minus_one_over_gamma_plus_one 0.33333333333333333f
95#define hydro_two_over_gamma_plus_one 0.66666666666666666f
96#define hydro_two_over_gamma_minus_one 2.f
97#define hydro_gamma_minus_one_over_two 0.5f
98#define hydro_two_gamma_over_gamma_minus_one 4.f
99#define hydro_one_over_gamma 0.5f
103#error "An adiabatic index needs to be chosen in const.h !"
114#if defined(HYDRO_GAMMA_5_3)
117 const float icbrt = icbrtf(x);
118 return icbrt * x * x;
120 const float cbrt = cbrtf(x);
121 return cbrt * cbrt * x;
124#elif defined(HYDRO_GAMMA_7_5)
126 return powf(x, 1.4f);
128#elif defined(HYDRO_GAMMA_4_3)
131 const float icbrt = icbrtf(x);
132 return icbrt * icbrt * x * x;
137#elif defined(HYDRO_GAMMA_2_1)
143 error(
"The adiabatic index is not defined !");
158#if defined(HYDRO_GAMMA_5_3)
161 const float icbrt = icbrtf(x);
164 const float cbrt = cbrtf(x);
168#elif defined(HYDRO_GAMMA_7_5)
170 return powf(x, 0.4f);
172#elif defined(HYDRO_GAMMA_4_3)
175 const float icbrt = icbrtf(x);
176 return x * icbrt * icbrt;
181#elif defined(HYDRO_GAMMA_2_1)
187 error(
"The adiabatic index is not defined !");
200pow_minus_gamma_minus_one(
float x) {
202#if defined(HYDRO_GAMMA_5_3)
205 const float icbrt = icbrtf(x);
206 return icbrt * icbrt;
208 const float cbrt_inv = 1.f / cbrtf(x);
209 return cbrt_inv * cbrt_inv;
212#elif defined(HYDRO_GAMMA_7_5)
214 return powf(x, -0.4f);
216#elif defined(HYDRO_GAMMA_4_3)
221 return 1.f / cbrtf(x);
224#elif defined(HYDRO_GAMMA_2_1)
230 error(
"The adiabatic index is not defined !");
248#if defined(HYDRO_GAMMA_5_3)
251 const float icbrt = icbrtf(x);
252 const float icbrt2 = icbrt * icbrt;
253 return icbrt * icbrt2 * icbrt2;
255 const float cbrt_inv = 1.f / cbrtf(x);
256 const float cbrt_inv2 = cbrt_inv * cbrt_inv;
257 return cbrt_inv * cbrt_inv2 * cbrt_inv2;
260#elif defined(HYDRO_GAMMA_7_5)
262 return powf(x, -1.4f);
264#elif defined(HYDRO_GAMMA_4_3)
267 const float cbrt_inv = icbrtf(x);
269 const float cbrt_inv = 1.f / cbrtf(x);
271 const float cbrt_inv2 = cbrt_inv * cbrt_inv;
272 return cbrt_inv2 * cbrt_inv2;
274#elif defined(HYDRO_GAMMA_2_1)
276 const float inv = 1.f /
x;
281 error(
"The adiabatic index is not defined !");
297pow_two_over_gamma_minus_one(
float x) {
299#if defined(HYDRO_GAMMA_5_3)
303#elif defined(HYDRO_GAMMA_7_5)
305 const float x2 =
x *
x;
306 const float x3 = x2 *
x;
309#elif defined(HYDRO_GAMMA_4_3)
311 const float x3 =
x *
x *
x;
314#elif defined(HYDRO_GAMMA_2_1)
320 error(
"The adiabatic index is not defined !");
337pow_two_gamma_over_gamma_minus_one(
float x) {
339#if defined(HYDRO_GAMMA_5_3)
341 const float x2 =
x *
x;
342 const float x3 = x2 *
x;
345#elif defined(HYDRO_GAMMA_7_5)
347 const float x2 =
x *
x;
348 const float x4 = x2 * x2;
351#elif defined(HYDRO_GAMMA_4_3)
353 const float x2 =
x *
x;
354 const float x4 = x2 * x2;
357#elif defined(HYDRO_GAMMA_2_1)
359 const float x2 =
x *
x;
364 error(
"The adiabatic index is not defined !");
381pow_gamma_minus_one_over_two_gamma(
float x) {
383#if defined(HYDRO_GAMMA_5_3)
385 return powf(x, 0.2f);
387#elif defined(HYDRO_GAMMA_7_5)
389 return powf(x, hydro_gamma_minus_one_over_two_gamma);
391#elif defined(HYDRO_GAMMA_4_3)
393 return powf(x, 0.125f);
395#elif defined(HYDRO_GAMMA_2_1)
397 return powf(x, 0.25f);
401 error(
"The adiabatic index is not defined !");
418pow_minus_gamma_plus_one_over_two_gamma(
float x) {
420#if defined(HYDRO_GAMMA_5_3)
422 return powf(x, -0.8f);
424#elif defined(HYDRO_GAMMA_7_5)
426 return powf(x, -hydro_gamma_plus_one_over_two_gamma);
428#elif defined(HYDRO_GAMMA_4_3)
430 return powf(x, -0.875f);
432#elif defined(HYDRO_GAMMA_2_1)
434 return powf(x, -0.75f);
438 error(
"The adiabatic index is not defined !");
455#if defined(HYDRO_GAMMA_5_3)
457 return powf(x, hydro_one_over_gamma);
459#elif defined(HYDRO_GAMMA_7_5)
461 return powf(x, hydro_one_over_gamma);
463#elif defined(HYDRO_GAMMA_4_3)
465 return powf(x, hydro_one_over_gamma);
467#elif defined(HYDRO_GAMMA_2_1)
473 error(
"The adiabatic index is not defined !");
487pow_three_gamma_minus_two(
float x) {
489#if defined(HYDRO_GAMMA_5_3)
493#elif defined(HYDRO_GAMMA_7_5)
495 return powf(x, 2.2f);
497#elif defined(HYDRO_GAMMA_4_3)
501#elif defined(HYDRO_GAMMA_2_1)
503 return x *
x *
x *
x;
507 error(
"The adiabatic index is not defined !");
522pow_three_gamma_minus_five_over_two(
float x) {
524#if defined(HYDRO_GAMMA_5_3)
528#elif defined(HYDRO_GAMMA_7_5)
530 return powf(x, -0.4f);
532#elif defined(HYDRO_GAMMA_4_3)
534 return 1.f / sqrtf(x);
536#elif defined(HYDRO_GAMMA_2_1)
542 error(
"The adiabatic index is not defined !");
556pow_three_gamma_minus_one(
float x) {
558#if defined(HYDRO_GAMMA_5_3)
562#elif defined(HYDRO_GAMMA_7_5)
564 return powf(x, 1.2f);
566#elif defined(HYDRO_GAMMA_4_3)
570#elif defined(HYDRO_GAMMA_2_1)
576 error(
"The adiabatic index is not defined !");
__attribute__((always_inline, const)) INLINE static float pow_gamma(float x)
Returns the argument to the power given by the adiabatic index.
#define INLINE
Defines inline.