{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Definition\n\nLet $\\Omega \\subseteq \\R^m$ be open and let $F \\colon \\Omega \\to \\R^m$ be the $C^1$ flux of a [[hyperbolic conservation law|XN081NCPF5]] $u_t + F(u)_x = 0$.\nA *Riemann solver* for $F$ is a map $H \\colon \\Omega \\times \\Omega \\to \\R^m$.\nIts value $H(u_l, u_r)$ is the numerical flux at an interface between a left state $u_l$ and a right state $u_r$.\nIt is obtained from an exact or approximate solution of the [[Riemann problem|GJWKX22VVE]] with data $u_l, u_r$.\nIt is required to be:\n\n1. consistent: $H(u, u) = F(u)$ for all $u \\in \\Omega$;\n2. locally Lipschitz continuous in both arguments.\n\nThe *exact Riemann solver* is $H(u_l, u_r) = F(w(0; u_l, u_r))$, where $w(x/t; u_l, u_r)$ is the self-similar [[entropy solution|1A01A3EJRX]] of the Riemann problem, when it exists and is unique.\n\n## Remarks\n\nExample: the HLL solver uses two estimates $S_L \u003c S_R$ of the slowest and fastest wave speeds.\nIt sets $H = F(u_l)$ if $0 \\le S_L$, $H = F(u_r)$ if $S_R \\le 0$, and otherwise\n$$H(u_l, u_r) = \\frac{S_R F(u_l) - S_L F(u_r) + S_L S_R (u_r - u_l)}{S_R - S_L}.$$\nFor $u_l = u_r = u$ every case gives $F(u)$, so this solver is consistent.\n\nNon-example: $H(u_l, u_r) = F(u_l) + F(u_r)$ fails clause 1, since $H(u, u) = 2F(u)$.\nA scheme with such a flux approximates the wrong equation.\n\nFor the scalar equation $u_t + a u_x = 0$, the exact solver gives $H(u_l, u_r) = a u_l$ if $a \u003e 0$ and $a u_r$ if $a \u003c 0$, which is the upwind flux.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "defines": "ZY4GY93C4B",
    "kind": "definition",
    "msc": [
      "65M08",
      "35L65"
    ],
    "name": "Riemann solver",
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Riemann_solver"
      }
    ],
    "tag": "9PTJWSCFS5",
    "uses": [
      "XN081NCPF5",
      "GJWKX22VVE",
      "1A01A3EJRX"
    ]
  },
  "kind": "definition",
  "link": "https://tamnd.github.io/math2/node/9PTJWSCFS5/",
  "links": [
    {
      "field": "defines",
      "target": "ZY4GY93C4B"
    },
    {
      "field": "uses",
      "target": "XN081NCPF5"
    },
    {
      "field": "uses",
      "target": "GJWKX22VVE"
    },
    {
      "field": "uses",
      "target": "1A01A3EJRX"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/9PTJWSCFS5.md",
  "msc": [
    "65M08",
    "35L65"
  ],
  "name": "Riemann solver",
  "prov": null,
  "role": "",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/9PT/9PTJWSCFS5.md",
  "status": null,
  "tag": "9PTJWSCFS5",
  "uri": "m2://9PTJWSCFS5",
  "url": "https://tamnd.github.io/math2/wiki/riemann-solver-definition/",
  "writing": {
    "tag": "9PTJWSCFS5",
    "kind": "definition",
    "level": "W0",
    "next": [
      {
        "what": "an inventory row",
        "note": "the row of the inventory that the node accounts for",
        "have": 0,
        "want": 1
      },
      {
        "what": "a source with a locator",
        "have": 0,
        "want": 1
      }
    ]
  }
}
