LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
fluid_nonhyperbolic.h
Go to the documentation of this file.
1#pragma once
2/**
3 * @file fluid_nonhyperbolic.h
4 * @ingroup line_solvers
5 * @brief The one exception the fluid fallback ladder catches.
6 *
7 * Split out of `fluid_moments.h` on 2026-08-28 so that `solver_fluid.h` can
8 * raise it too. `fluid_moments.h` includes `solver_fluid.h`, so the definition
9 * could not stay there and be visible in the window loop: the conservation
10 * guard raises it from inside the integration, where a divergence is first
11 * detectable, and `fluid_runner.h` catches it in exactly the same place as
12 * before.
13 */
14
15#include <string>
16
17#include "line/util/error.h"
18
19namespace line {
20namespace fluid {
21
22/**
23 * Raised when the moment closure cannot serve this model: the linearization at
24 * the fixed point is not hyperbolic, or the drift has left the simplex. A
25 * non-hyperbolic fixed point cannot be detected before the mean is solved, so
26 * `fluid_minnormal_applicable` cannot decline it in advance; the runner catches
27 * THIS exception, and only this one, to fall back to a first-order method when
28 * the moment closure was RESOLVED from `default` rather than asked for by name.
29 * Catching a plain NumericError there would also swallow a singular Jacobian or
30 * a failed integration, which are defects and not model properties.
31 */
33public:
34 explicit FluidNonHyperbolicError(const std::string& what) : NumericError(what) {}
35};
36
37} // namespace fluid
38} // namespace line
NumericError(const std::string &what)
Definition error.h:45
FluidNonHyperbolicError(const std::string &what)
The exception types the port throws.