Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
mhd.hpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
10#pragma once
11
19#include "shambackends/math.hpp"
20
21namespace shamphys {
22
23 template<class Tvec, class Tscal>
24 struct MHD_physics {
25 inline static constexpr Tscal v_alfven(Tvec B, Tscal rho, Tscal mu_0) {
26 return sycl::sqrt(sycl::dot(B, B) / (mu_0 * rho));
27 };
28
29 inline static constexpr Tscal v_shock(Tscal cs, Tvec B, Tscal rho, Tscal mu_0) {
30 return sycl::sqrt(cs * cs + v_alfven(B, rho, mu_0) * v_alfven(B, rho, mu_0));
31 };
32
33 inline static constexpr Tscal vsigB(Tvec v_ab, Tvec r_ab_unit) {
34 Tvec v_cross_r = sycl::cross(v_ab, r_ab_unit);
35 Tscal vsig_B_a = sycl::sqrt(
36 v_cross_r[0] * v_cross_r[0] + v_cross_r[1] * v_cross_r[1]
37 + v_cross_r[2] * v_cross_r[2]);
38 return vsig_B_a;
39 };
40
41 inline static constexpr Tscal vsig_MHD(
42 Tvec v_ab,
43 Tvec r_ab_unit,
44 Tscal cs_a,
45 Tvec B_a,
46 Tscal rho_a,
47 Tscal mu_0,
48 Tscal alpha_av,
49 Tscal beta_av) {
50 Tscal v_ab_r_ab = sycl::dot(v_ab, r_ab_unit);
51 Tscal abs_v_ab_r_ab = sycl::fabs(v_ab_r_ab);
52 Tscal v_a = v_shock(cs_a, B_a, rho_a, mu_0);
53 Tscal vsig = alpha_av * v_a + beta_av * abs_v_ab_r_ab;
54
55 return vsig;
56 }
57 };
58
59} // namespace shamphys