56 const auto view = hyperbolic_system_.template view<dim, Number>();
57 const auto g = view.gravity();
59 const auto x = point[0];
62 const Number xM = 10.;
63 const Number xS = 11.7;
64 const Number zM = 0.2;
65 Number h_inflow = 0.28205279813802181;
66 Number q_inflow = 0.18;
68 zM + 1.5 *
ryujin::pow(q_inflow * q_inflow / g, Number(1. / 3.));
72 if (which_case_ ==
"subsonic") {
75 cBer = std::pow(q_inflow / h_inflow, 2) / (2. * g) + h_inflow;
79 const Number d = q_inflow * q_inflow / (2. * g);
80 const Number b = compute_bathymetry(point) - cBer;
81 const Number Q = -std::pow(b, 2) / 9.;
82 const Number R = -(27. * d + 2. * std::pow(b, 3)) / 54.;
83 const Number theta = acos(
ryujin::pow(-Q, Number(-1.5)) * R);
86 const Number h_initial = h_inflow - compute_bathymetry(point);
93 Number h_exact = 2. * std::sqrt(-Q) * cos(theta / 3.) - b / 3.;
94 if (which_case_ ==
"transcritical") {
95 if (xM <= x && x < xS) {
96 h_exact = 2. * std::sqrt(-Q) *
97 cos((4. * dealii::numbers::PI + theta) / 3.) -
100 h_exact = 0.28205279813802181;