58 const auto view = hyperbolic_system_.template view<dim, Number>();
59 const auto g = view.gravity();
61 const auto x = point[0];
64 const Number xM = 10.;
65 const Number xS = 11.7;
66 const Number zM = 0.2;
67 Number h_inflow = 0.28205279813802181;
68 Number q_inflow = 0.18;
70 zM + 1.5 *
ryujin::pow(q_inflow * q_inflow / g, Number(1. / 3.));
74 if (which_case_ ==
"subsonic") {
77 cBer = std::pow(q_inflow / h_inflow, 2) / (2. * g) + h_inflow;
81 const Number d = q_inflow * q_inflow / (2. * g);
82 const Number b = compute_bathymetry(point) - cBer;
83 const Number Q = -std::pow(b, 2) / 9.;
84 const Number R = -(27. * d + 2. * std::pow(b, 3)) / 54.;
85 const Number theta = acos(
ryujin::pow(-Q, Number(-1.5)) * R);
88 const Number h_initial = h_inflow - compute_bathymetry(point);
95 Number h_exact = 2. * std::sqrt(-Q) * cos(theta / 3.) - b / 3.;
96 if (which_case_ ==
"transcritical") {
97 if (xM <= x && x < xS) {
98 h_exact = 2. * std::sqrt(-Q) *
99 cos((4. * dealii::numbers::PI + theta) / 3.) -
102 h_exact = 0.28205279813802181;