deep_causality_physics/kernels/mhd/
wrappers.rs1use crate::kernels::mhd::{grmhd, ideal, plasma, resistive};
7use crate::{
8 AlfvenSpeed, DebyeLength, Diffusivity, ElectronDensity, LarmorRadius, MagneticPressure,
9 PlasmaFrequency,
10};
11use crate::{Density, Mass, PhysicalField, Speed, Temperature};
12use core::fmt::Debug;
13use deep_causality_algebra::RealField;
14use deep_causality_core::{CausalityError, PropagatingEffect};
15use deep_causality_num::FromPrimitive;
16use deep_causality_par::MaybeParallel;
17use deep_causality_tensor::CausalTensor;
18use deep_causality_topology::SimplicialManifold;
19
20pub fn alfven_speed<R>(
25 b: &PhysicalField<R>,
26 rho: &Density<R>,
27 mu0: R,
28) -> PropagatingEffect<AlfvenSpeed<R>>
29where
30 R: RealField + MaybeParallel + Debug,
31{
32 match ideal::alfven_speed_kernel(b, rho, mu0) {
33 Ok(v) => PropagatingEffect::pure(v),
34 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
35 }
36}
37
38pub fn magnetic_pressure<R>(b: &PhysicalField<R>, mu0: R) -> PropagatingEffect<MagneticPressure<R>>
39where
40 R: RealField + MaybeParallel + FromPrimitive + Debug,
41{
42 match ideal::magnetic_pressure_kernel(b, mu0) {
43 Ok(p) => PropagatingEffect::pure(p),
44 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
45 }
46}
47
48pub fn ideal_induction<R>(
49 v: &SimplicialManifold<R, R>,
50 b: &SimplicialManifold<R, R>,
51) -> PropagatingEffect<CausalTensor<R>>
52where
53 R: RealField + MaybeParallel + FromPrimitive + Default + PartialEq + Debug,
54{
55 match ideal::ideal_induction_kernel(v, b) {
56 Ok(t) => PropagatingEffect::pure(t),
57 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
58 }
59}
60
61pub fn resistive_diffusion<R>(
66 b: &SimplicialManifold<R, R>,
67 eta: Diffusivity<R>,
68) -> PropagatingEffect<CausalTensor<R>>
69where
70 R: RealField + MaybeParallel + FromPrimitive + Default + PartialEq + Debug,
71{
72 match resistive::resistive_diffusion_kernel(b, eta) {
73 Ok(t) => PropagatingEffect::pure(t),
74 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
75 }
76}
77
78pub fn magnetic_reconnection_rate<R>(va: AlfvenSpeed<R>, s: R) -> PropagatingEffect<Speed<R>>
79where
80 R: RealField + MaybeParallel + Debug,
81{
82 match resistive::magnetic_reconnection_rate_kernel(va, s) {
83 Ok(v) => PropagatingEffect::pure(v),
84 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
85 }
86}
87
88use crate::LorentzianMetric;
93
94pub fn relativistic_current<R, M>(
98 em_manifold: &SimplicialManifold<R, R>,
99 spacetime_metric: &M,
100) -> PropagatingEffect<CausalTensor<R>>
101where
102 R: RealField + MaybeParallel + FromPrimitive + Default + PartialEq + Debug,
103 M: LorentzianMetric,
104{
105 match grmhd::relativistic_current_kernel(em_manifold, spacetime_metric) {
106 Ok(j) => PropagatingEffect::pure(j),
107 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
108 }
109}
110
111pub fn energy_momentum_tensor_em<R>(
112 em: &CausalTensor<R>,
113 metric: &CausalTensor<R>,
114) -> PropagatingEffect<CausalTensor<R>>
115where
116 R: RealField + MaybeParallel + FromPrimitive + core::iter::Sum + Default + PartialOrd + Debug,
117{
118 match grmhd::energy_momentum_tensor_em_kernel(em, metric) {
119 Ok(t) => PropagatingEffect::pure(t),
120 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
121 }
122}
123
124pub fn debye_length<R>(t: Temperature<R>, n: R, eps0: R, e: R) -> PropagatingEffect<DebyeLength<R>>
129where
130 R: RealField + MaybeParallel + FromPrimitive + Debug,
131{
132 match plasma::debye_length_kernel(t, n, eps0, e) {
133 Ok(l) => PropagatingEffect::pure(l),
134 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
135 }
136}
137
138pub fn larmor_radius<R>(
139 m: Mass<R>,
140 v: Speed<R>,
141 q: R,
142 b: &PhysicalField<R>,
143) -> PropagatingEffect<LarmorRadius<R>>
144where
145 R: RealField + MaybeParallel + Debug,
146{
147 match plasma::larmor_radius_kernel(m, v, q, b) {
148 Ok(r) => PropagatingEffect::pure(r),
149 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
150 }
151}
152
153pub fn plasma_frequency<R>(n_e: ElectronDensity<R>) -> PropagatingEffect<PlasmaFrequency<R>>
154where
155 R: RealField + MaybeParallel + FromPrimitive + Debug,
156{
157 match plasma::plasma_frequency_kernel(n_e) {
158 Ok(w) => PropagatingEffect::pure(w),
159 Err(e) => PropagatingEffect::from_error(CausalityError::from(e)),
160 }
161}