34 using Tscal = shambase::VecComponent<Tvec>;
35 static constexpr u32 dim = shambase::VectorProperties<Tvec>::dimension;
40 Tscal sigma_mhd = 0.1;
45 Tscal sigma_mhd = 0.1;
53 using Variant = std::variant<None, IdealMHD_constrained_hyper_para, NonIdealMHD>;
55 Variant config =
None{};
57 void set(Variant v) { config = v; }
59 inline bool has_B_field() {
60 bool is_B = bool(std::get_if<IdealMHD_constrained_hyper_para>(&config))
61 || bool(std::get_if<NonIdealMHD>(&config));
65 inline bool has_psi_field() {
66 bool is_psi = bool(std::get_if<IdealMHD_constrained_hyper_para>(&config))
67 || bool(std::get_if<NonIdealMHD>(&config));
71 inline bool has_divB_field() {
72 bool is_divB = bool(std::get_if<IdealMHD_constrained_hyper_para>(&config));
76 inline bool has_curlB_field() {
77 bool is_curlB = bool(std::get_if<NonIdealMHD>(&config));
81 inline bool has_dtdivB_field() {
82 bool is_dtdivB = bool(std::get_if<NonIdealMHD>(&config));
86 inline void print_status() {
87 logger::raw_ln(
"--- MHD config");
89 if (
None *v = std::get_if<None>(&config)) {
90 logger::raw_ln(
" Config MHD Type : None (No MHD)");
93 = std::get_if<IdealMHD_constrained_hyper_para>(&config)) {
94 logger::raw_ln(
" Config MHD : Ideal MHD, constrained hyperbolic/parabolic treatment");
95 logger::raw_ln(
" sigma_mhd =", v->sigma_mhd);
96 }
else if (
NonIdealMHD *v = std::get_if<NonIdealMHD>(&config)) {
97 logger::raw_ln(
" Config MHD Type : Non Ideal MHD");
98 logger::raw_ln(
" sigma_mhd =", v->sigma_mhd);
103 logger::raw_ln(
"--- MHD config (deduced)");
105 logger::raw_ln(
"-------------");
121 using None =
typename T::None;
122 using IMHD =
typename T::IdealMHD_constrained_hyper_para;
123 using NonIdealMHD =
typename T::NonIdealMHD;
126 if (
const None *v = std::get_if<None>(&p.config)) {
128 {
"mhd_type",
"none"},
130 }
else if (
const IMHD *v = std::get_if<IMHD>(&p.config)) {
132 {
"mhd_type",
"ideal_mhd_constrained_hyper_para"},
133 {
"sigma_mhd", v->sigma_mhd},
134 {
"alpha_u", v->alpha_u},
136 }
else if (
const NonIdealMHD *v = std::get_if<NonIdealMHD>(&p.config)) {
139 {
"mhd_type",
"non_ideal_mhd"},
140 {
"sigma_mhd", v->sigma_mhd},
141 {
"alpha_u", v->alpha_u},