von Kármán渦列の有限差分法シミュレーション

# 初めに
これまでに開発してきた有限差分法コード（cf. [こちら](https://qiita.com/ShotaDeguchi/items/7d3ab5e9765200360a3d)や[こちら](https://qiita.com/ShotaDeguchi/items/93699a35eada106239d7)）を障害物周りの流れに拡張し，von Kármánの渦列をシミュレートする．

# Methods
## 支配方程式
非圧縮性流体（Newtonian）を考える．無次元化しないまま話を進める．
```math
\begin{alignat}{2}
    \nabla \cdot \boldsymbol{u}
    &= 0
    &&\quad \text{in} \quad \Omega \times \mathcal{I} \\
    \frac{\partial \boldsymbol{u}}{\partial t}
    + \left( \boldsymbol{u} \cdot \nabla \right) \boldsymbol{u}
    &= - \frac{1}{\rho} \nabla p
    + \nu \nabla^2 \boldsymbol{u}
    + \boldsymbol{f}
    &&\quad \text{in} \quad \Omega \times \mathcal{I} \\
\end{alignat}
```
ここで，$\boldsymbol{u}$は速度$\[ \mathrm{m / s} \]$，$p$は圧力$\[ \mathrm{Pa} \]$，$\rho$は密度$\[ \mathrm{kg / m^3} \]$，$\nu$は動粘度$\[ \mathrm{m^2 / s} \]$である（$\rho$と$\nu$は定数とする）．$\boldsymbol{f}$は外力$\[ \mathrm{m / s^2} \]$であり，今回はゼロとする．

パラメータには，

* 密度　: $\rho = 1 \times 10^{0} \ \[ \mathrm{kg / m^3} \]$
* 動粘度: $\nu  = 1 \times 10^{-2} \ \[ \mathrm{m^2 / s} \]$

を選ぶ（動粘度は場合によって変える）．このように設定しておくと，粘度$\mu \ \[ \mathrm{Pa \cdot s} \]$と動粘度$\nu \ \[ \mathrm{m^2 / s} \]$が同じ数値となり便利である（$\mu = \rho \nu$）．また，特徴長さと特徴流速に$L = 1 \ \[ \mathrm{m} \], \ U = 1 \ \[ \mathrm{m / s} \]$を取れば，$\mathrm{Re} = \nu^{-1} = 100$となるように，Reynolds数の設定が簡便になる（特徴長さと特徴流速を固定して動粘度だけ変えれば良い）．一見，「一体全体どのような流体を考えているのだ？」と感じるが，[既に見た](https://qiita.com/ShotaDeguchi/items/93699a35eada106239d7)ように，Reynoldsの相似則の範囲内では現象は本質的に同義であり，したがって，例えば，水の物性値（cf. [こちら](https://cattech-lab.com/science-tools/properties-water/)）を用いるときには，特徴長さや特徴流速を大きく設定して同じだけのReynolds数を達成すれば良い．

## 離散化
Chorinの射影法（[Chorin1968](https://doi.org/10.2307/2004575)）により速度と圧力をカップリングする．久しぶりに次元のある式を見つめるので，パラメータを忘れないよう注意深く進む．運動量の式を以下のように分離する．
```math
\begin{align}
    \frac{\boldsymbol{u}^{(*)} - \boldsymbol{u}^{(n)}}{\tau}
    &= 
    - \left( \boldsymbol{u}^{(n)} \cdot \nabla \right) \boldsymbol{u}^{(n)}
    + \nu \nabla^2 \boldsymbol{u}^{(n)}
    + \boldsymbol{f}^{(n)} \\
    \frac{\boldsymbol{u}^{(n+1)} - \boldsymbol{u}^{(*)}}{\tau}
    &= - \frac{1}{\rho} \nabla p^{(n+1)} \\
\end{align}
```
ここで，$\tau$は時間刻みである．2式目で発散を取り，$\nabla \cdot \boldsymbol{u}^{(n+1)} = 0$を要求する．
```math
\begin{align}
    \nabla \cdot \left(
        \frac{\boldsymbol{u}^{(n+1)} - \boldsymbol{u}^{(*)}}{\tau}
    \right)
    &= \nabla \cdot \left(
        - \frac{1}{\rho} \nabla p^{(n+1)}
    \right) \\
    \therefore
    \nabla^2 p^{(n+1)}
    &= \frac{\rho}{\tau} \nabla \cdot \boldsymbol{u}^{(*)} \\
\end{align}
```
即ち，

| # | Description | Equation |
|:-:|:-:|:-|
| 1 | 速度の予測 | $\boldsymbol{u}^{(*)} = \boldsymbol{u}^{(n)} + \tau \left( - \left( \boldsymbol{u}^{(n)} \cdot \nabla \right) \boldsymbol{u}^{(n)} + \nu \nabla^2 \boldsymbol{u}^{(n)} + \boldsymbol{f}^{(n)} \right)$ |
| 2 | 圧力の求解 | $\nabla^2 p^{(n+1)} = \rho \cdot \tau^{-1} \cdot \nabla \cdot \boldsymbol{u}^{(*)}$ |
| 3 | 速度の修正 | $\boldsymbol{u}^{(n+1)} = \boldsymbol{u}^{(*)} + \tau \left( - \rho^{-1} \cdot \nabla p^{(n+1)} \right)$ |

により時間進行する．

空間の作用素は，過去の投稿（[こちら](https://qiita.com/ShotaDeguchi/items/0e9a5113fe69fa517c5e)や[こちら](https://qiita.com/ShotaDeguchi/items/1516f1c498bb9edc03a7)）に倣う．明言しない限り，渦粘性は導入しない．

# Results
## Hagen–Poiseuille流れ
先ずは簡単に，Hagen–Poiseuilleの流れをテストケースに選ぶ（とは言え，久しぶりすぎて[破滅的に忘却](https://doi.org/10.1016/S0079-7421(08)60536-8)していた，，）．

### 流入速度を規定する場合
$\Omega = (0, L_x) \times (0, L_y) = (0, 4 L) \times (0, L), \ \mathcal{I} = (0, T)$を考え，$L = 1 \ \[ \mathrm{m} \], \ T = 10 \ \[ \mathrm{s} \]$とする．$h = 5 \times 10^{-2} \ \[ \mathrm{m} \], \ \tau = 1 \times 10^{-2} \ \[ \mathrm{s} \]$で離散化する．

既に述べたように，$\nu = 1 \times 10^{-2} \ \[ \mathrm{m^2 / s} \]$を選んでおり，いまの特徴長さは$L_y = 1 \ \[ \mathrm{m} \]$である．$\boldsymbol{U}_{\infty} = \[ 1, 0 \]^{\top} \ \[ \mathrm{m / s} \]$なる一様流速で流入させる．$\mathrm{Re} \simeq 100$となる．

境界条件は，[河野2022: 詳解 流れの数値計算](https://www.coronasha.co.jp/np/isbn/9784339046762/)のp199辺りの数値計算を参考に，

* 左端: $\boldsymbol{u} = \boldsymbol{U}_{\infty}, \partial_n p = \boldsymbol{0}$
* 右端: $\partial_{n} \boldsymbol{u} = \boldsymbol{0}, \ p = 0$
* 上端: $\boldsymbol{u} = \boldsymbol{0}, \ \partial_n p = \boldsymbol{0}$
* 下端: $\boldsymbol{u} = \boldsymbol{0}, \ \partial_n p = \boldsymbol{0}$

とした．

初期の速度場を全くゼロとした場合と，乱数（$\sim \mathcal{U} (-0.5, 0.5)$）を用いて摂動を与えた場合の結果を示す．上から，圧力，流速ノルム，流速ベクトル，渦度である．

| 摂動無し | 摂動有り |
|:-:|:-:|
| ![wo_perturbation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/c3f7f1a6-5d91-10cd-ed48-fb16b78f8f4c.gif) | ![w_perturbation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/27117491-c701-3c38-a0ec-a825815fb706.gif) |

良く知られているように，十分発達したとき，速度プロファイルはparabolicになる．$(0, 4 L)$の区間では十分に発達しているとは若干言い難い気もするが（もう少しのrun-in区間を設ければ良かった），大らかにこの程度とする．なお，$\mathrm{Re} = 100$より，粘性の影響が中々に強いので，初期の摂動は素早く消散している．

### 圧力勾配で駆動する場合
ところで，この現象は本来，圧力勾配により駆動される流れである．これを考えると，計算上でも，流入速度を与えるより，圧力勾配を与える方が"自然"であろう．

fully-developedな流れを考え，parabolicな速度分布（$\boldsymbol{U} = \left[ U_{\mathrm{max}} y \left( L_y - y \right) / L_y^2, 0 \right]^{\top} \ \[ \mathrm{m / s} \]$）をイメージする．このとき，平均流速$U_{\mathrm{mean}}$は，
```math
\begin{align}
    U_{\mathrm{mean}}
    = \int_{0}^{L_y}
        U_{\mathrm{max}} \frac{y \left( L_y - y \right)}{L_y^2}
    = \frac{1}{6} U_{\mathrm{max}} L_y
    = \frac{1}{6} U_{\mathrm{max}} L
    = \frac{1}{6} U_{\mathrm{max}}
\end{align}
```
である．特徴流速として$U_{\mathrm{max}}$を採用する場合と$U_{\mathrm{mean}}$を採用する場合が考えられる．

**特徴流速に$U_{\mathrm{max}}$を採用する場合**
対応するReynolds数を
```math
\begin{align}
    \mathrm{Re}_{\mathrm{max}}
    = \frac{U_{\mathrm{max}} L}{\nu}
\end{align}
```
と定めておく．$\mathrm{Re}_{\mathrm{max}} = 100$を狙うと，
```math
\begin{align}
    100
    = \mathrm{Re}_{\mathrm{max}}
    = \frac{U_{\mathrm{max}} \cdot 1}{1 \times 10^{-2}}
    \Leftrightarrow
    U_{\mathrm{max}} = 1 \ \left[ \mathrm{m / s} \right]
\end{align}
```
より，最大流速が$1 \ \[ \mathrm{m / s} \]$になるような圧力勾配を与えれば良い．解析解から，
```math
\begin{align}
    U_{\mathrm{max}}
    &= - \frac{1}{8 \rho \nu} \frac{\partial p}{\partial x} L_y^2 \\
    \therefore
    \frac{\partial p}{\partial x}
    &= - 8 \rho \nu \frac{U_{\mathrm{max}}}{L_y^2}
     = - 0.08 \ \left[ \mathrm{Pa / m} \right] \\
\end{align}
```
なる圧力勾配を与えれば，$\mathrm{Re}_{\mathrm{max}} \simeq 100$．

**特徴流速に$U_{\mathrm{mean}}$を採用する場合**
対応するReynolds数を
```math
\begin{align}
    \mathrm{Re}_{\mathrm{mean}}
    = \frac{U_{\mathrm{mean}} L}{\nu}
\end{align}
```
と定める．先程と同様に，
```math
\begin{align}
    100
    = \mathrm{Re}_{\mathrm{mean}}
    = \frac{U_{\mathrm{mean}} \cdot 1}{1 \times 10^{-2}}
    \Leftrightarrow
    U_{\mathrm{max}} = 6 \ \left[ \mathrm{m / s} \right]
\end{align}
```
であるから，
```math
\begin{align}
    U_{\mathrm{max}}
    &= - \frac{1}{8 \rho \nu} \frac{\partial p}{\partial x} L_y^2 \\
    \therefore
    \frac{\partial p}{\partial x}
    &= - 8 \rho \nu \frac{U_{\mathrm{max}}}{L_y^2}
     = - 0.48 \ \left[ \mathrm{Pa / m} \right] \\
\end{align}
```
なる圧力勾配を与えれば，$\mathrm{Re}_{\mathrm{mean}} \simeq 100$．

先程と同じ領域を考え，$T = 60 \ \[ \mathrm{s} \]$までシミュレートする．$h = 5 \times 10^{-2} \ \[ \mathrm{m} \], \ \tau = 2.5 \times 10^{-3} \ \[ \mathrm{s} \]$とした．境界条件は，

* 左右端: 周期境界条件
* 上下端: 非滑り条件

とした．

| $\mathrm{Re}_{\mathrm{max}} \simeq 100$ | $\mathrm{Re}_{\mathrm{mean}} \simeq 100$ |
|:-:|:-:|
| ![Re_max.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/857833b6-6b7d-d2f8-a426-433648643e35.gif) | ![Re_mean.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/a5cfc18c-7eb6-1cf8-d762-d6590f99ea22.gif) |

時刻$T = 60 \ \[ \mathrm{s} \]$付近での，1ステップ当たりの速度の変化量や管路内の最大流速は，

* $\mathrm{Re}_{\mathrm{max}} \simeq 100$ 
    * 速度の変化量　　: $6.688 \times 10^{-7}$
    * 管路内の最大流速: $0.997 \ \[ \mathrm{m / s} \]$
    * Courant数$C$，拡散数$D$: $C = 0.05, \ D = 0.02$
* $\mathrm{Re}_{\mathrm{mean}} \simeq 100$
    * 速度の変化量　　: $6.688 \times 10^{-7}$
    * 管路内の最大流速: $5.983 \ \[ \mathrm{m / s} \]$
    * Courant数$C$，拡散数$D$: $C = 0.30, \ D = 0.02$

であり，十分に収束しているし，狙った速度も出ていると言って良いだろう．

## Couette–Poiseuille流れ
Hagen–Poiseuille流れにおいて，上端の壁をある流速$U^{\prime} \ \[ \mathrm{m / s} \]$で動かすと，pressure-driven（Hagen–Poiseuille）かつshear-driven（Couette）な流れ場になる．

先程のHagen–Poiseuilleの流れについて，parabolicな速度プロファイルの内から，その最大流速$U_{\mathrm{max}}$を特徴流速に採用する場合を思い出す．$\mathrm{Re}_{\mathrm{max}} = 100$を狙い，$\partial p / \partial x = - 0.08 \ \left[ \mathrm{Pa / m} \right]$だけの圧力勾配を与えるのであった．

同じ問題に対し，$U^{\prime} = 1 , -0.5 \ \[ \mathrm{m / s} \]$とした結果を示す．

| $U^{\prime} = 1 \ \[ \mathrm{m / s} \]$ | $U^{\prime} = -0.5 \ \[ \mathrm{m / s} \]$ |
|:-:|:-:|
| ![U1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/73a7278a-c378-25c2-b385-cc13cc8d1d86.gif) | ![U-0.5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/c1a0ae03-85e0-8d27-c82c-a2bc2827097b.gif) |
| ![U1_slice.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/80e738c6-7f1a-c7b0-6d9d-ed231b65a66b.gif) | ![U-0.5_slice.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/fb460e58-13bb-e178-9b91-93a9e89bd154.gif) |

Hagen–Poiseuille流れとCouette流れが重なったような状態となった．2つ目の図は，$x = 0.5$での速度のスライスである．解析解（定常解，黒実線）と数値解（赤破線）が良く合致している．

## Backstep流れ
打ち出された流れが，どの辺りで着地するかを見る問題らしい（backstep / backward-facing step flow）．この問題では，特徴流速に流入流速を，特徴長さに階段の高さを選ぶようである．

一様流速$\boldsymbol{U}_{\infty} = \[ 1, 0 \]^{\top} \ \[ \mathrm{m / s} \]$で流入させ，階段の高さ$H$には$H = 0.5 L = 0.5 \ \[ \mathrm{m} \]$を取る（expansion ratio: 2）．動粘度を動かしてReynolds数を変化させる．$h = 2 \times 10^{-2} \ \[ \mathrm{m} \], \ \tau = 2 \times 10^{-3} \ \[ \mathrm{s} \]$で離散化し，$T = 20 \ \[ \mathrm{s} \]$までシミュレートする（これは定常問題か？ううむ，良く知らない，，）．

| $\mathrm{Re} \simeq 50$ | $\mathrm{Re} \simeq 500$ |
|:-:|:-:|
| ![backstep_Re50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/b11a63a2-8dc5-1992-0523-7a44d693cf77.gif) | ![backstep_Re500.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/4beb4296-b044-11f1-4209-ac57ee6af82f.gif) |

少しだけ調べてみたが，これといった参照解が中々見つけられなかった．[Biswas+2004](https://doi.org/10.1115/1.1760532)と凡そ似ている，という，定性的かつ大雑把な結論に留める（もう少し横方向に長い方が良かったかもしれない）．しかし，激しい剥離が起きる箇所で負圧が生まれて吸い込みを引き起こすなど，これだけシンプルな形状なのに，複雑に渦を巻くというのは興味深い．

**(2024/11追記)**
暫く経って，最近は，負圧が吸い込んでいるというより，単に圧力勾配に乗っているという方が正しいかもしれない，と思ってきた．また，境界条件の与え方に誤りがあったので，修正した．コード修正のついでに，可視化に少し工夫を加え，圧力は無次元化圧力$p^{\prime} \left( = p / \left( 1/2 \rho U_{\infty} \right) \right)$を視ることにし，圧力勾配は運動方程式に登場する形式$- \nabla p / \rho$で表示することにした．また，速度はベクトルにノルムで色付けし，渦度はゼロ領域が見えやすいようにfilled contourにした．残念ながら，ファイルサイズ上限から，低解像度化する必要があったので，鮮やかな色使いではない．

| $\mathrm{Re} \simeq 50$ | $\mathrm{Re} \simeq 500$ |
|:-:|:-:|
| ![backstep_Re50_new.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/06757559-60ec-0667-1304-3497be39e99b.gif) | ![backstep_Re500_new.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/b0e11622-d1b2-ed97-b7ad-3bc31eb15ef7.gif) |

また，これに合わせて少し調べたが，この問題はやはり定常解を見るようだ．例えば，[Dick1982](https://doi.org/10.1007/BF00389268), [Kim&Moin1985](https://doi.org/10.1016/0021-9991(85)90148-2), [Scott+1986](https://doi.org/10.1016/0045-7930(86)90016-2), [Rogers&Kwak1991](https://doi.org/10.1016/0168-9274(91)90097-J)，或いは，[こちら](https://www.cfd-benchmarks.com/Backwardflow/)がPIVの結果を公開してくれている．[中山司2008: 流れ解析のための有限要素法入門](https://www.utp.or.jp/book/b305778.html)の第8章も詳しい．気が向いたときに手元の計算と比較することにしておく．

**(2025/05追記)**
$\nabla ^2 \psi = - \nabla \times \boldsymbol{u}$を$\psi = a y + b \text{ on } \Gamma_{\text{inlet}}, \ \partial_{\boldsymbol{n}} \psi = 0 \text{ on } \Gamma_{\text{outlet}}$の下で解き，流れ関数のプロットを追加した（可視化を追加しただけなので，メインの計算結果には変化無し）．

| $\mathrm{Re} \simeq 50$ | $\mathrm{Re} \simeq 500$ |
|:-:|:-:|
| ![ezgif.com-optimize (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/dc90c882-492e-4d3d-b2e0-a7c4cc717c81.gif) | ![ezgif.com-optimize (5).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/4e47b2da-68d4-4fa0-bbc6-fbaa7485b315.gif) |

流れ線を見ると，構造の応力線と電磁気の磁力線を思い出す．流れ線が集まった領域の流れは速いし，応力線が集まった場所で応力集中が発生しているし，磁力線が密な箇所の磁力は強い．

## von Kármán渦列
やっと，本題である（ここに至るまでの簡単な問題たちは，簡単だったものの，境界条件の取り扱いを考えるなどの点で大いに役立った）．気になっていた幾つかの事項に触れていく．

### Initial perturbation
改めて，$\Omega = (0, L_x) \times (0, L_y) = (0, 4 L) \times (0, L), \ \mathcal{I} = (0, T)$を考える．流れ場の中央に1辺$D \left( = L / 5 \right) \ \[ \mathrm{m} \]$の正方形のシリンダーを配置する（blockage ratio: 0.2, see, e.g., [Kumar&Mittal2005](https://doi.org/10.1002/fld.1098), [Prasanth+2006](https://doi.org/10.1016/j.jfluidstructs.2006.04.011), [Nguyen&Lei2021](https://doi.org/10.1016/j.oceaneng.2021.108567), [Nvv&Chatterjee2022](https://doi.org/10.1007/s12046-021-01777-z), [Abdul-Salam&Tachie2024](https://doi.org/10.1115/1.4063803) for more about the effect of blockage ratio）．$L = 1 \ \[ \mathrm{m} \], \ T = 40 \ \[ \mathrm{s} \]$とする．最大流速が$1 \ \[ \mathrm{m / s} \]$であるparabolicな流速で流入させる．その平均流速は$2/3 \ \[ \mathrm{m / s} \]$である．以降，特徴流速に最大流速を，特徴長さにシリンダー径を選び，動粘度を動かしてReynolds数を変化させる[^1]．離散化パラメータは，$h = 5 \times 10^{-2} \ \[ \mathrm{m} \], \ \tau = 5 \times 10^{-3} \ \[ \mathrm{s} \]$とする（かなり大雑把だが，コードの確認のため）．境界条件の取り扱いは，[こちら](https://qiita.com/umigamek/items/a02d99ae3c1debf26fcd)や[こちら](https://wwwold.mathematik.tu-dortmund.de/~featflow/en/benchmarks/cfdbenchmarking/flow.html)に準ずる（全く同じという訳ではない）．

[^1]: したがって，ここでの$\mathrm{Re}$は，$\mathrm{Re}_{\mathrm{max}}$の意味で定義している．$\mathrm{Re}_{\mathrm{mean}}$の意味で解釈するには，最大流速と平均流速の関係から，それぞれ2/3倍して考えれば良い．

特徴長さが$D = 0.2 \ \[ \mathrm{m} \]$になっていることに注意して$\nu \ \[ \mathrm{m^2 / s} \]$を選び，$\mathrm{Re} \simeq 40, \ 200, \ 2,000$の3つを設定する．渦を誘発するため，初期の速度場を乱数（$\sim \mathcal{U} (-0.5, 0.5)$）で乱しておいた（長時間待てば，きちんと渦が生まれるのだが，私はせっかちだ）．

|  | $\mathrm{Re} \simeq 40$ | $\mathrm{Re} \simeq 200$ | $\mathrm{Re} \simeq 2,000$ |
|:-:|:-:|:-:|:-:|
| 摂動無し | ![vonKarman_wop_Re20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/850522eb-77bb-c6aa-5673-afe030c368f5.gif) | ![vonKarman_wop_Re100.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/1b1d58a1-3262-556d-951b-a878d19b9257.gif) | ![vonKarman_wop_Re1000.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/869dba20-5601-d650-5bb1-242807193b00.gif) |
| 摂動有り | ![vonKarman_wp_Re20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/b3d334c1-c6d6-f781-d9b6-6c41234b02e6.gif) | ![vonKarman_wp_Re100.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/14058e16-2a97-978b-f00d-db3f4477a063.gif) | ![vonKarman_wp_Re1000.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/51d8c143-fe2b-f610-bc60-9cf897ae65a1.gif) |

色の様子がこれまでと異なるのは，アップロード可能なファイル上限に抑えるよう圧縮したためである（が，レトロな雰囲気があって中々愛着が湧くではないか）．

渦が生まれるまでの間は，wake領域で流体から障害物向きの流れが発生し，流れ線が閉じている（教科書のPotential流れの章で学んだことが，計算上本当に起きている！）．また，摂動が無ければ，$t = 40 \ \left[ \mathrm{s} \right]$程度まで待たなければ渦が見えてこないが（[40秒で支度しな！](https://www.google.com/search?q=40%E7%A7%92%E3%81%A7%E6%94%AF%E5%BA%A6%E3%81%97%E3%81%AA&rlz=1C5CHFA_en&oq=40&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgYIARBFGDkyBggCEEUYOzIGCAMQRRg8MgYIBBBFGDwyBggFEEUYPNIBBzcyMWowajeoAgCwAgA&sourceid=chrome&ie=UTF-8#fpstate=ive&vld=cid:dee8dd48,vid:0DXNlh2uyuE,st:0)），摂動を与えておけば，渦が素早く成長する．安定に見えるモードが突然崩壊し，ある振動のパターンを呈する様子を見ると，何だかbifurcation diagramを思い出す（関係有るかな，関係無いかな，，）．

$\mathrm{Re} \simeq 40$では，粘性の影響が強く，緩やかな流れに落ち着いている．transientな状態に移るまでのReynolds数は$40 \sim 50$程度と知られているので，凡そ正しそうだと大雑把に片付ける．$\mathrm{Re} \simeq 200, \ 2,000$では，wake領域に渦が生成されているが，壁が渦の成長を強く制限しているので，壁の影響をもっと遠方に飛ばしてやろう．

### Blockage ratio
昔受講した大学院の講義では，こういう問題では，blockage ratioを3%以下に抑えるのが望ましい，と教わった．$\mathrm{Re} \simeq 200, \ 2,000$の場合について，$\beta$を変化させてみる．空間解像度の議論は後回しにして，$h = 5 \times 10^{-3} \ \[ \mathrm{m} \], \ \tau = 5 \times 10^{-4} \ \[ \mathrm{s} \]$で離散化する．渦粘性として，Smagorinskyモデル（[Smagorinsky1963](https://doi.org/10.1175/1520-0493(1963)091%3C0099:GCEWTP%3E2.3.CO;2)）を導入し，SGS渦の特徴長さとグリッド幅の比$C_s$は$C_s = 0.1$とした（[Lilly1966](http://dx.doi.org/10.5065/D62R3PMM), [Deardorff1970](https://doi.org/10.1017/S0022112070000691)）．次項の議論で触れるため，特徴的な長さ$D$と空間解像度$h$との比率を併記しておく．

| $\beta$ | $D/h$ | $\mathrm{Re} \simeq 200$ | $\mathrm{Re} \simeq 2,000$ |
|:-:|:-:|:-:|:-:|
| $0.2$  | $40$ | ![vonKarman_Re200_B20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/1fc2c9ac-bcc9-fb1e-80bd-65b479d45f27.gif) | ![vonKarman_Re2000_B20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/e4a19b3e-d065-3972-eb33-643c5e93f10b.gif) |
| $0.1$  | $20$ | ![vonKarman_Re200_B10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/a470ab4f-aa72-d02d-9205-c497805a29e1.gif) | ![vonKarman_Re2000_B10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/6688d864-baf9-0b6a-38df-7ce8da2cde96.gif) |
| $0.05$ | $10$ | ![vonKarman_Re200_B05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/0dd945b4-22fd-9503-90b9-a4422f88ef51.gif) | ![vonKarman_Re2000_B05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/85df5e2d-5d70-8cdb-08ba-f2fa51352302.gif) |
| $0.03$ | $6$  | ![vonKarman_Re200_B03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/510f6f62-8828-abe6-1864-3c72671defd1.gif) | ![vonKarman_Re2000_B03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/522ae892-c2fd-161d-d815-55f6dde1aa49.gif) |

3回再生したら停止するようにした．ダンプアウト間隔をもう少し細かくしておくと良かったかもしれないが（$\beta \le 0.05$では，ダンプアウト間隔と"尾を振る"周期が殆ど同じだ），コストが高く，再計算する気力は起きない．

$\mathrm{Re} \simeq 200$について．$\beta = 0.2$では，既に見たように，渦が生まれて直ぐに壁の影響を受けており，その成長が阻害されている．$\beta = 0.1$では，その傾向は緩和されているが，障害物から離れるにつれ，流れが壁の影響を受けていないとは言い難くなっている（どれだけの長さの流路を考えるかにも依るが）．$\beta = 0.05, \ 0.03$では，壁の影響を殆ど受けておらず，渦がかなり自由に発達，移流している．また，$\beta = 0.05$の時点で既に壁の拘束は小さく，$\beta = 0.03$との相違はあまり無いように感じる．

$\mathrm{Re} \simeq 2,000$について．何れのblockage ratioに於いても，渦の成長は壁に制限されている．$\beta = 0.05, \ 0.03$ほどにしても，激しく放出された渦が，直ぐに壁に衝突，減衰，反射している．また，メインの話題からは逸れるが，同符号の渦同士が衝突して合体する様子も見ることができる．

Reynolds数の上昇に伴い，これより小さくすべきというblockage ratio（critical blockage ratioとでも言うべきか？）は変わってくるように感じる．教わった3%以下という指針も，恐らくユニバーサルではないのではないか，と感じる．しかし，やはり計算資源は有限なので，こういう指針の存在はコミュニティにとって非常に重要・有用であると思う．

### Spatial resolution
障害物周りの流れをシミュレートするに当たり，必要な解像度はどの程度か気になる．最も特徴的な流れは障害物付近の流れであるから，障害物に対する相対的な解像度で以て議論すべきであろう．計算法が異なるが，例えば，[Breuer+2000](https://doi.org/10.1016/S0142-727X(99)00081-8)（LBM, FVM）や[Asai+2023](https://doi.org/10.1016/j.cma.2023.116203)（SPH）は，障害物のすぐ傍の流れをどれだけ解像するか，という議論により数値解の収束を主張している．これに倣い，$\mathrm{Re} \simeq 200, \ 2,000$について，blockage ratioを$\beta = 0.05$に固定したまま（$D = 0.05 \ \[ \mathrm{m} \]$），相対的な解像度$D/h$を少しずつ変化させたときの結果を示す．先程と同様に，時間分解能は$\tau = 5 \times 10^{-4} \ \[ \mathrm{s} \]$とし，Smagorinskyの渦粘性（$C_s = 0.1$）を用いる．

| $h \ \[ \mathrm{m} \]$ | $D/h$ | $\mathrm{Re} \simeq 200$ | $\mathrm{Re} \simeq 2,000$ |
|:-:|:-:|:-:|:-:|
| $0.01$   | $5$  | ![vorticity_it_010000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/2a43d477-8747-4d22-5af5-4147426994f8.png) | ![vorticity_it_004000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/2f2013ef-25fc-ab25-fcd7-b90f652c445b.png) |
| $0.005$  | $10$ | ![vorticity_it_010000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/4e7de73a-a3ad-0165-720d-5ef5d56d2679.png) | ![vorticity_it_004000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/ea6e83e9-3658-be43-b903-0b4bf934129e.png) |
| $0.0025$ | $20$ | ![vorticity_it_010000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/28e6ff61-0eb2-515a-00a6-43f89b0a14a9.png) | ![vorticity_it_004000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/ff1dd7c5-3719-cb3d-89f4-15cdcffc02aa.png) |

$\mathrm{Re} \simeq 200$では，$t = 5 \ \[ \mathrm{s} \]$までの計算を実行した．$\mathrm{Re} \simeq 2,000, \ D/h = 20$では，Courant数が徐々に大きくなり，$t = 2.8 \sim 2.9 \ \[ \mathrm{s} \]$周辺で爆発してしまったので，その少し前の$t = 2.0 \ \[ \mathrm{s} \]$を見比べる（時間増分を小さくして再計算するには，あまりに計算コストが高い[^2]）．

[^2]: 陽解法は，こういうとき（失敗するとき）に，ショックが大きい．簡単で速い陽解法は素敵だが，安定性の高い陰解法も魅力的に感じる．

$\mathrm{Re} \simeq 200$について．$D/h = 5$と$D/h = 10$の間には，顕著な差がある．$D/h = 10$と$D/h = 20$の間には，違いが無いとは言い難い．やはり，$D/h = 10$の方が若干ぼやけていたり，diffusiveな印象がある．しかし，$D/h = 10$は凡そ$D/h = 20$に近いと言って良いだろう（少なくとも顕著な差がある訳ではない）．

$\mathrm{Re} \simeq 2,000$について．$D/h = 5$と$D/h = 10$の間には，やはり顕著な差があり，かなりなまっている．$D/h = 10$と$D/h = 20$を見比べても，放出される渦の概形は似ているが，両者には明確な差があると言えるだろう．ここまで局所的な渦構造を見る必要があるか？という疑問はあるが，Reynolds数に応じて，必要な解像度に差がありそうだということが分かる．

周辺の議論はcircular cylinderで展開されることが多いが，本稿同様にsquare cylinder周りの高Reynolds数での流れを対象に，これをDNSした例として，[Trias+2015](https://doi.org/10.1016/j.compfluid.2015.09.013)など．

### Boundary conditions
これまで，壁には非すべり条件（no-slip condition）を与えて計算してきた．これは，粘着の条件とも呼ばれるように，静止した壁と粘性流体との間の境界条件としては，最も自然だと考える．一方で，壁が流体に対して相対的な速度を持っている場合や空気と海面の間の境界条件などを考慮する場合には，すべり条件（slip condition）を課す場合もある．また，十分に大きい計算領域を用意する場合や壁から十分に遠方の流れを考える場合などには，周期境界条件（priodic condition）を用いる事もある[^3]．

[^3]: 対称な境界というものもあるらしい．cf. [こちら](https://www.cfd-online.com/Forums/main/103507-symmetric-boundary.html)．が，正直に白状すると，良く分かっていない．

上下端の境界に対して，

* 非すべり条件: $\boldsymbol{u} = \boldsymbol{0}, \ \partial_{\boldsymbol{n}} p = 0$
* すべり条件　: $\partial_{\boldsymbol{n}} \boldsymbol{u} = \boldsymbol{0}, \ \partial_{\boldsymbol{n}} p = 0$
* 周期境界条件: $\boldsymbol{u}_u = \boldsymbol{u}_l, \ p_u = p_l$

を与え，流れの様子がどのように変わるかを見る（$\phi_u, \ \phi_l$は，上端，下端での物理量を示す）．$\mathrm{Re} \simeq 2,000, \ \beta = 0.05$の場合について，$h = 5 \times 10^{-3} \ \[ \mathrm{m} \], \ \tau = 5 \times 10^{-4} \ \[ \mathrm{s} \]$で離散化し（$D/h = 10$），Smagorinskyの渦粘性（$C_s = 0.1$）を用いる．流入条件は一様流速とした．先程まではparabolicな流入流速を与え，その最大流速を特徴流速としてReynolds数を概算していたので，Reynolds数の定義が少し違う．

先ず，$\mathrm{Re} \simeq 200$について．

| $\mathrm{BC}$ | $t = 1 \ \[ \mathrm{s} \]$ | $t = 4 \ \[ \mathrm{s} \]$ | $t = 7 \ \[ \mathrm{s} \]$ | $t = 10 \ \[ \mathrm{s} \]$ |
|:-:|:-:|:-:|:-:|:-:|
| $\mathrm{no \ slip}$ | ![vorticity_it_002000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/61f838aa-ed42-df43-5ece-e62da349eb04.png)  | ![vorticity_it_008000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/07f90754-d757-85ad-db43-2bf6e1e2c2fc.png)  | ![vorticity_it_014000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/86e4e5ad-924b-8179-ce5e-6742c1f30d77.png)  | ![vorticity_it_020000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/8feefaf1-3aff-761a-f70b-50962dbd8d89.png)  |
| $\mathrm{slip}$      | ![vorticity_it_002000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/6a8949c6-0736-ce1d-1ad5-9fcb71257ce4.png)  | ![vorticity_it_008000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/0b38f722-ac11-28fc-5850-9d102d951efd.png)  | ![vorticity_it_014000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/634310cb-f2ae-decf-3d90-d60b12ccd694.png)  | ![vorticity_it_020000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/e8546b20-1598-16b0-9c54-ef067ab5fdcd.png)  |
| $\mathrm{periodic}$  | ![vorticity_it_002000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/0d46e09f-7ae4-8a88-473e-251058fb9209.png)  | ![vorticity_it_008000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/da5e3688-b494-783a-4302-50b847764bc3.png)  | ![vorticity_it_014000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/bf74d8be-e201-e867-9b9e-9083d5746656.png)  | ![vorticity_it_020000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/5f29b887-26e5-9355-9b05-d55991896657.png)  |

続いて，$\mathrm{Re} \simeq 2,000$の場合について．

| $\mathrm{BC}$ | $t = 1 \ \[ \mathrm{s} \]$ | $t = 4 \ \[ \mathrm{s} \]$ | $t = 7 \ \[ \mathrm{s} \]$ | $t = 10 \ \[ \mathrm{s} \]$ |
|:-:|:-:|:-:|:-:|:-:|
| $\mathrm{no \ slip}$ | ![vorticity_it_002000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/e54525f4-a45e-f57a-a286-0ce5965cc254.png)  | ![vorticity_it_008000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/d125629a-5f46-54fd-4abd-d6c009528d0a.png)  | ![vorticity_it_014000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/841e7cc0-5cfc-b310-da65-63241e285c36.png)  | ![vorticity_it_020000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/dd578f66-c7a3-06a7-0446-fb51ff541664.png)  |
| $\mathrm{slip}$      | ![vorticity_it_002000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/fb717424-b979-2fc3-1d8d-6a45226797d4.png)  | ![vorticity_it_008000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/78c2b3b2-a446-fdd0-a8d6-9cf5152e7845.png)  | ![vorticity_it_014000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/4031e030-d0a1-8889-fad4-39ff52dcc218.png)  | ![vorticity_it_020000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/61e70aab-8387-87eb-1a37-9b76566f5988.png)  |
| $\mathrm{periodic}$  | ![vorticity_it_002000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/308b09d2-c568-3e49-eb7c-3bef84b82a7b.png)  | ![vorticity_it_008000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/cb84c15c-fd5e-9514-93bd-12c83edc123b.png)  | ![vorticity_it_014000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/6c62dbb8-f303-4b16-ff17-eb73a736311d.png)  | ![vorticity_it_020000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/b013fe79-c9b4-0128-5502-2705b67881e6.png)  |

非すべり条件では流入境界の直ぐ傍の壁面からshearが起きているのに対し，すべり条件ではこれが起きない．但し，壁自体は存在するので，壁に衝突する渦もある．壁に衝突した渦は，非すべり条件では反射するが，すべり条件では壁の表面ですべり続ける．周期境界条件を課すと，壁の影響が陽に現れないので，shearが起きず，さらに，上端から飛び出した渦が下端から登場し（vice versa），wake regionにある他の渦に干渉する．周期境界を課してwake regionが十分に自由な挙動を示すようになるまでblockage ratioを小さくするなどの方針で，適切なblockage ratioを決めても良いかもしれない．$\mathrm{Re} \simeq 2,000$では，$t = 1 \ \[ \mathrm{s} \]$では全ての条件で渦の放出パターンで同様であるのに対し，$t = 4 \ \[ \mathrm{s} \]$の時点で既にズレが生じているのも面白い．

### Advection scheme
特別断り無く，移流項には3次精度の風上近似（[Kawamura&Kuwahara1984](https://doi.org/10.2514/6.1984-340), [Kawamura+1986](https://doi.org/10.1016/0169-5983(86)90014-6)）を適用してきたが，[過去にそうした](https://qiita.com/ShotaDeguchi/items/93699a35eada106239d7)ように，こういった"それらしい"流れ場における近似スキームの影響を調べてみる．

移流スキームとして，

* 1次精度風上差分
* QUICK（[Leaonard1979](https://doi.org/10.1016/0045-7825(79)90034-3)）
* KK（[Kawamura&Kuwahara1984](https://doi.org/10.2514/6.1984-340), [Kawamura+1986](https://doi.org/10.1016/0169-5983(86)90014-6)）

を比較する（[村上+1988](https://doi.org/10.3130/aijax.390.0_1)がインテンシブに纏めている，[こちら](https://i-ric.org/yasu/nbook2/index.html#)も詳しい）．移流項以外は全て同一の近似スキーム（2次精度中心差分）とする．[過去のテスト](https://qiita.com/ShotaDeguchi/items/7d3ab5e9765200360a3d)では，以下のような収束の傾向を得ている．ところで，付録で議論しているように，私は，QUICKは2次精度，KKは3次精度であると考えている．そしてこの数値実験は，私の考えをサポートしている（この数値実験だけで結論を出すのは良くないだろうが，考えを黙っておくのも良くないだろうし，間違っていたら理解をsolidにする良い機会だ）．2次精度の方法には，Lax-Wendroff（[Lax&Wendroff1960](https://doi.org/10.1002/cpa.3160130205)）も有名だが，空間離散化の影響にのみ集中したい（Lax-Wendroffは，時間・空間両者について2次精度）ので，これら3つを比較する．

[昔，各スキームの収束性を調べたとき](https://qiita.com/ShotaDeguchi/items/7d3ab5e9765200360a3d)，以下のような結果を得た．

| Gauss波の移流 | 各スキームの収束性 |
|:-:|:-:|
| ![ezgif.com-optimize.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/4f229dd6-acef-5a31-48c2-b64d486d6a9f.gif) | ![fig_err_max.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/fec0f4a6-e197-1341-f0b6-08f9be6546e4.png) |

$\mathrm{Re} \simeq 200, \ 2,000, \ \beta = 0.05, \ h = 5 \times 10^{-3} \ \[ \mathrm{m} \], \ \tau = 5 \times 10^{-4} \ \[ \mathrm{s} \], \ C_s = 0.1$とする．上下端は非すべりし，parabolicな流入流速を与える．

| $\mathrm{scheme}$ | $\mathrm{Re} \simeq 200$ | $\mathrm{Re} \simeq 2,000$ |
|:-:|:-:|:-:|
| $\mathrm{1st}$    | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/9ad0eb77-6b3f-83b7-9289-c2af0e704edd.png) | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/155e4525-3635-c724-7e82-88d83ccec56c.png) |
| $\mathrm{QUICK}$  | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/ddabb5e7-521b-26f0-d206-c2f2e53a8188.png) | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/1c0955fd-659c-08ce-8b4b-cac9fc776c57.png) |
| $\mathrm{KK}$     | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/7c5f0c53-e05a-4003-1c5d-d370e67e631b.png) | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/04afb4ce-4032-2e73-0e2c-b8d7c43fa1be.png) |

1次精度風上差分の結果を見ると，$\mathrm{Re} \simeq 200, \ 2,000$が殆ど同じ流れ場になっている．これは，1次精度スキームの数値粘性が，$\mathrm{Re} \simeq 2,000$の比較的激しい流れを酷く鈍らせていることに起因すると考える．実際，同スキームは，
```math
\begin{align}
    u \frac{d \phi}{d x}
    \sim \mathcal{A}_{(1)} \left( u, \phi \right)
        - \mathcal{D}_{(2)}^{(2)} \left( |u| \frac{h}{2} , \phi \right)
\end{align}
```
と書くことができる．ここで，$\mathcal{A} (a, b)$は移流の近似（$a$の速度で$b$が移流する），$\mathcal{D} (a, b)$は拡散の近似（$a$の速さで$b$が拡散する）とした．下付き文字は近似精度，上付き文字は微分階数である．上式から，分子粘性$\nu$と同じオーダー（2階）の数値粘性$\bar{\nu}$が，$h (= 5 \times 10^{-3} \ \[ \mathrm{m} \])$のオーダーで効いている．今回の問題設定では，

* $\mathrm{Re} = 200$　: $\nu = 2.5 \times 10^{-4} \ \[ \mathrm{m^2 / s} \] < \bar{\nu} \sim \mathcal{O} (10^{-3})$
* $\mathrm{Re} = 2,000$: $\nu = 2.5 \times 10^{-5} \ \[ \mathrm{m^2 / s} \] < \bar{\nu} \sim \mathcal{O} (10^{-3})$

であり，数値粘性が実質的な粘性（＝分子粘性＋数値粘性）の効果を殆ど支配してしまっている．これが，1次精度風上差分では，何れの$\mathrm{Re}$でもほぼ同様の計算結果となった理由であろうと考える．[こちら](https://cattech-lab.com/science-tools/cavity-validation/)では，低次精度スキームは「計算が安定・収束性が良い」という旨の記述があるが，私は，分子粘性と同じオーダーの数値粘性が混入すると，本来とは異なる状態への収束が起きると考えている．即ち，（分子粘性と同程度の）数値粘性にバイアスされた状態への収束性が良い，という方が正しいと思う（[accuracy vs. precision](https://en.wikipedia.org/wiki/Accuracy_and_precision)）．但し，数値粘性にバイアスされた解は，解空間の中で，ある尺度で，ある程度まで，本来の状態に近いと考えられるだろうから，手早く大雑把に現象を追跡したいときには有用だろうと考える（しかし，やはりある程度の範疇まで，，ここまで現象と乖離してしまうとね，，）．

QUICKは，1次精度風上差分よりシャープに渦を解像しているが，何だか違和感が拭えない．良い言葉が見当たらないが，$\mathrm{Re} \simeq 200$の時点で既に，流れが不自然に裂けている（渦が分散・振動する様子）．しかし，KKによる$\mathrm{Re} \simeq 200$の結果は自然に見える．或いは，私がいつもKKの結果を見るから，バイアスされているだけかもしれない．どちらが正しいかは分からない，ということを強調しつつ，相違点を調べてみる．両者は，形式的に，
```math
\begin{alignat}{2}
    &\mathrm{QUICK:} \quad
    &&u \frac{d \phi}{d x}
    \sim \mathcal{A}_{(2)} \left( u, \phi \right)
        + \mathcal{D}_{(2)}^{(4)} \left( |u| \frac{h^3}{16}, \phi \right) \\
    &\mathrm{KK:} \quad
    &&u \frac{d \phi}{d x}
    \sim \mathcal{A}_{(3)} \left( u, \phi \right)
        + \mathcal{D}_{(2)}^{(4)} \left( |u| \frac{h^3}{4}, \phi \right)
\end{alignat}
```
と書ける．相違点は，移流項の近似精度と数値粘性の大きさである．ううむ，移流項の近似精度が2次か3次かで結果にここまで大きな影響は出るだろうか？拡散項と圧力勾配項を2次精度で近似しているので，スキーム全体で空間に関して2次精度なのだ（勿論，inertiaが強い問題であると認めた上で）．数値粘性の強さが差異の原因ではなかろうかと当たりを付けてみる．両者をたすきがけして，
```math
\begin{alignat}{2}
    &\mathrm{QUICK-KK:} \quad
    &&u \frac{d \phi}{d x}
    \sim \mathcal{A}_{(2)} \left( u, \phi \right)
        + \mathcal{D}_{(2)}^{(4)} \left( |u| \frac{h^3}{4}, \phi \right) \\
    &\mathrm{KK-QUICK:} \quad
    &&u \frac{d \phi}{d x}
    \sim \mathcal{A}_{(3)} \left( u, \phi \right)
        + \mathcal{D}_{(2)}^{(4)} \left( |u| \frac{h^3}{16}, \phi \right) 
\end{alignat}
```
を用意し[^4]，再計算してみる．私の予想は合っているだろうか．

[^4]: [村上+1988](https://doi.org/10.3130/aijax.390.0_1)によると，LeonardによるUTOPIA（Uniformly Third Order Polynomial Interpolation Algorithm）と呼ばれるスキームがあるらしく（昔受講した大学院の講義でも，UTOPIAスキームに少しだけ触れていたが，この原論文を見つけられなかった），それは，ここでのKK-QUICKによく似ている．

| $\mathrm{scheme}$ | $\mathrm{Re} \simeq 200$ | $\mathrm{Re} \simeq 2,000$ |
|:-:|:-:|:-:|
| $\mathrm{QUICK-KK}$ | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/a5cc5b55-3a53-fd44-9b7a-d349dcdb2d1b.png) | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/34ab28ba-5f90-1817-8c56-7eb9234439bd.png) |
| $\mathrm{KK-QUICK}$ | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/4ba34ff2-41cd-09bf-1a41-0516be8b3ce6.png) | ![vorticity_it_019800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/4e0f4836-14ec-a0bf-d4d0-774c8d7a3e4a.png) |

観測結果として，QUICK-KK（移流項の2次近似 + 大きい4階数値粘性）は，流れ場が安定しており，KKと酷似した結果を与えている．一方，KK-QUICK（移流項の3次近似 + 小さい4階数値粘性）は，流れ場が不安定であり，QUICKと非常によく似ている．以上から，恐らく私の予想は正しかったと考える．[村上+1988](https://doi.org/10.3130/aijax.390.0_1)によると，河村は数値粘性にさらに調整可能な係数を乗じたことがあるそうだが（原論文を見つけられなかった），数値粘性を極限まで小さくしてゼロにしてしまったりすると，スキーム自体が不安定化するから（実際，QUICKはKKと同じ階数の数値粘性であるのに，非常に不安定），そこまでしなくても良いと思う（そのままのKKで十分だろう，という意味）．

本項での結論は，QUICKは数値粘性が小さすぎてスキームが不安定化しつつある，ということである．KKは安定であるが，しかし本当に現象を正しく追従できているかについては，未だ議論の余地がある．次項で定量的な評価を試みる．

### Strouhal数
Strouhal数
```math
\begin{align}
    \mathrm{St}
    &= \frac{f D}{U}
\end{align}
```
は，流れ場の特徴を示す無次元量であり，前項で触れた移流スキームの定量的な比較の指標となり得る（$f$は現象の周波数$\[ \mathrm{ / s} \]$，$D$は特徴長さ$\[ \mathrm{m} \]$，$U$は特徴流速$\[ \mathrm{m / s} \]$）．

blockage ratioを$\beta = 0.05$に固定し，境界条件の議論から上下端に周期条件を課した流れ場に対して，空間解像度を少しずつ上昇させつつ，Strouhal数を計測する．定量的な評価のため，先行研究（[Norberg1993](https://doi.org/10.1016/0167-6105(93)90014-F), [Sharma&Eswaran2004](https://doi.org/10.1080/10407780490278562), [Sen+2011](https://doi.org/10.1002/fld.2416), [Mashhadi+2021](https://doi.org/10.1016/j.ijmecsci.2020.106264)）を参照し，手元の計算と比較する．また，[Williamson1988](https://doi.org/10.1063/1.866978)は，circular cylinderのlaminar vortex shedding regime（Williamson1988は$60 \le \mathrm{Re} \le 180$程度を調べている）において，Strouhal数とReynolds数の間には，
```math
\begin{align}
    \mathrm{St}
    &= \frac{1}{\mathrm{Re}} \left( c_0 + c_1 \mathrm{Re} + c_2 \mathrm{Re}^2 \right) \\
    \mathrm{where} \
    \left( c_0, c_1, c_2 \right) 
    &= \left( -3.3265, 0.1816, 1.6 \times 10^{-4} \right)
\end{align}
```
なる関係があると報告している．障害物の形状が違うのでsolidには言い難いが，参考程度に併記した．$\mathrm{St}$の計測に当たり，周波数$f \ \[ \mathrm{/s} \]$をどうやって測るのが良いか悩んだが，簡単に，$(x, y) = (1.5, 0.5)$における鉛直流速を指標にした．つまり，1秒間に何回鉛直流速が振動するか，である．しかし，これはあまり良い方針じゃないかもしれない．

| $\mathrm{QUICK}$ | $\mathrm{KK}$ |
|:-:|:-:|
| ![QUICK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/3beaf695-2ed9-1583-3fcb-74f8d97488a6.png) | ![KK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529612/cfcb6258-a8eb-9d9f-2de5-6280ce9a9724.png) |

先ず，circular cylinderに関する議論である[Williamson1988](https://doi.org/10.1063/1.866978)と，square cylinderの議論である[Norberg1993](https://doi.org/10.1016/0167-6105(93)90014-F), [Sharma&Eswaran2004](https://doi.org/10.1080/10407780490278562), [Sen+2011](https://doi.org/10.1002/fld.2416), [Mashhadi+2021](https://doi.org/10.1016/j.ijmecsci.2020.106264)の間には大きな乖離がある．Williamson1988の式を$y$軸方向に平行移動させた破線は，square cylinderに対してもtendencyを捉えているかもしれないが，多分，もう全く違う現象なのではないかと思ってしまう．

続いて，手元の計算結果について．$\mathrm{Re} = 100$では，KKは数値解らしく参照点に近づいている．QUICKはそこそこである（中間の解像度が爆発しているのは変だが）．$\mathrm{Re} = 150$も調べたが，QUICKもKKも参照点からは激しく乖離し，もう自信が無い（数値解らしい収束の傾向も無い）．QUICKは散付きが顕著だが，KKもそう優れているとは言い辛い結果になってしまった．色々，当初の目論見から大きく外れ，満足できる結果を得なかった．残念．

**== 雑談ここから ==**
[こちら](https://www.jsme.or.jp/jsme-medwiki/doku.php?id=09:1002355#:~:text=%E5%86%86%E6%9F%B1%E3%81%AE%E3%82%B9%E3%83%88%E3%83%AD%E3%83%BC%E3%83%8F%E3%83%AB%E6%95%B0,%E3%81%A7%E7%B4%840.2%E3%81%A7%E3%81%82%E3%82%8B%EF%BC%8E)によると，円柱の場合，流れ場のStrouhal数は，$200 \le \mathrm{Re} \le 200,000$の広い範囲で，$\mathrm{St} \approx 0.2$程度に留まることが知られているらしい．一方，[こちら](https://note.com/meca_eng_0114/n/n57c58301413c)によると，角柱では$\mathrm{St} \approx 0.16$程度らしい．激しい流れになると，3次元的な渦の広がりが卓越するので，現在のコードではこれだけ広い範囲のReynolds数を調べることは叶わない．計算コスト的にも，かなり難しい．

また，[こちら](https://eaglepubs.erau.edu/introductiontoaerospaceflightvehicles/chapter/bluff-body-flows/)にもあるように，例えばバスなどの長方形らしい形状をした車両（bluff body）は，そうでない車両より，背圧による抗力が大きい．同サイトには，角柱を含め，様々な形状に於ける抗力係数も載っている．
**== 雑談ここまで ==**

# 終わりに
~~本当は，blockage ratioについて調べたり，壁の影響を遠くにしてやったりなど，やりたいことは沢山あるのだが，本稿だけで今月のファイルアップロード上限に達してしまい，もうこれ以上の数値実験を報告できないので，一旦はここまでとする．目に楽しい結果たちであった．~~

**(2024/11追記)**
数値実験の章で議論が広がりすぎてしまった感は否めない．が，色々とやっている内に気になることが増えてしまい，気になったことはやってみないと気が済まない性分なので，まあそういう訳で，全部上手く行った訳ではないが，やりたかったことは一通り済ませたつもりだ．

直交グリッドしか考慮していないので，[DFG benchmark](https://wwwold.mathematik.tu-dortmund.de/~featflow/en/benchmarks/cfdbenchmarking.html)などと比較できないのが心残りだ（空間を変換すれば可能かもしれないが，そういうことは，現状，考えていない）．

# Appendix
## 無次元量
本文に登場した無次元量について記しておく．

### Reynolds数
慣性力と粘性力の比．
```math
\begin{align}
    \mathrm{Re}
    &= \frac{U D}{\nu}
\end{align}
```
ここで，$\nu$は動粘度$\nu \ \[ \mathrm{m^2 / s} \]$，$U$は特徴流速$\[ \mathrm{m / s} \]$，$D$は特徴長さ$\[ \mathrm{m} \]$である．

### Strouhal数
時間変化によって生じる力と流れの慣性力の比．
```math
\begin{align}
    \mathrm{St}
    &= \frac{f D}{U}
\end{align}
```
ここで，$f$は現象の周波数$\[ \mathrm{ / s} \]$，$D$は特徴長さ$\[ \mathrm{m} \]$，$U$は特徴流速$\[ \mathrm{m / s} \]$である．

### Expansion ratio
backstep流れの話題では，次のexpansion ratioがしばしば話題に上がる．
```math
\begin{align}
    \alpha
    &= \frac{L}{H}
\end{align}
```
ここで，$L$は流入口の高さ$\[ \mathrm{m} \]$，$H$は階段の高さ$\[ \mathrm{m} \]$である．

### Blockage ratio
von Kármán渦列の話題では，次のblockage ratioが良く話題に上がる．
```math
\begin{align}
    \beta
    &= \frac{D}{H}
\end{align}
```
ここで，$D$は障害物の特徴長さ$\[ \mathrm{m} \]$，$H$は流入口の高さ$\[ \mathrm{m} \]$である．

## 解析解
簡単な問題には，その解析的な解が分かる場合がある．

### Hagen–Poiseuille流れ
流れが1次元的であるとして，
```math
\begin{align}
    \frac{\partial u}{\partial x}
    &= 0 \\
    \frac{\partial u}{\partial t}
    + u \frac{\partial u}{\partial x}
    &= - \frac{1}{\rho} \frac{\partial p}{\partial x}
    + \nu \left(
        \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2}
    \right)
\end{align}
```
を考える．十分な時間が経ち，fully-developedであるとすると，
```math
\begin{align}
    \frac{\partial u}{\partial t}
    = 0, \quad
    \frac{\partial u}{\partial x}
    = 0, \quad
    \frac{\partial p}{\partial x}
    = \mathrm{(const.)}
\end{align}
```
より，
```math
\begin{align}
    0
    &= - \frac{1}{\rho} \frac{\partial p}{\partial x}
    + \nu \frac{\partial^2 u}{\partial y^2} \\
    \therefore
    u
    &= \frac{1}{2 \rho \nu} \frac{\partial p}{\partial x} y^2 + c_1 y + c_2 \\
\end{align}
```
境界条件に，$u (0) = u (L_y) = 0$を与えると，
```math
\begin{align}
    c_1
    = - \frac{1}{2 \rho \nu} \frac{\partial p}{\partial x} L_y, \quad
    c_2
    = 0 
\end{align}
```
より，
```math
\begin{align}
    u
    &= \frac{1}{2 \rho \nu} \frac{\partial p}{\partial x} y \left( y - L_y \right) \\
\end{align}
```
が解析解である．これは綺麗なparabolaなので，適当に微分したり平方完成したりして，
```math
\begin{align}
    u \left( y = \frac{1}{2} L_y \right)
    &= - \frac{1}{8 \rho \nu} \frac{\partial p}{\partial x} L_y^2 \\
\end{align}
```
が最大流速であると分かる．

### Couette–Poiseuille流れ
Hagen–Poiseuilleのときと同様の手続きにより，
```math
\begin{align}
    u
    &= \frac{1}{2 \rho \nu} \frac{\partial p}{\partial x} y^2 + c_1 y + c_2 \\
\end{align}
```
という一般解に，先程とは異なる境界条件（$u (0) = 0, u (L_y) = U^{\prime}$）を与え，
```math
\begin{align}
    c_1
    = - \frac{1}{2 \rho \nu} \frac{\partial p}{\partial x} L_y + \frac{U^{\prime}}{L_y}, \quad
    c_2
    = 0 
\end{align}
```
より，
```math
\begin{align}
    u
    &= \frac{1}{2 \rho \nu} \frac{\partial p}{\partial x} y \left( y - L_y \right) 
        + \frac{U^{\prime}}{L} y \\
\end{align}
```
が解析解である．歪んではいるが，2次式なので，$\partial u / \partial y = 0$に最大流速がある．

## 移流項の有限差分近似
何度でも勉強し直そう．[過去の議論](https://qiita.com/ShotaDeguchi/items/7d3ab5e9765200360a3d)との差分として，打ち切りによる誤差項をより明示的に残しながら考える．

### 1次精度風上差分
風上方向からの移流を意識して，
```math
\begin{align}
    u \frac{d \phi}{d x}
    =
    \begin{cases}
        u \left(\phi_{i}   - \phi_{i-1}\right) / h + \mathcal{O} \left[ h \right] & \left( u \ge 0 \right) \\
        u \left(\phi_{i+1} - \phi_{i}  \right) / h + \mathcal{O} \left[ h \right] & \left( u \lt 0 \right)
    \end{cases}
\end{align}
```
を基礎に考える．移流の向きによる場合分けを，
```math
\begin{align}
    u 
    = \frac{u + \lvert u \rvert}{2} + \frac{u - \lvert u \rvert}{2}
\end{align}
```
の関係に吸収させれば，
```math
\begin{align}
    u \frac{d \phi}{d x}
    &= \frac{u + \lvert u \rvert}{2} \frac{\phi_{i} - \phi_{i-1}}{h}
        + \frac{u - \lvert u \rvert}{2} \frac{\phi_{i+1} - \phi_{i}}{h}
        + \mathcal{O} \left[ h \right] \\
    &= u \frac{\phi_{i+1} - \phi_{i-1}}{h}
        - |u| \frac{h}{2} \frac{\phi_{i+1} - 2 \phi_{i} + \phi_{i-1}}{h^2}
        + \mathcal{O} \left[ h \right] \\
\end{align}
```
を得る．スキーム全体で1次精度である．

### QUICK
$\phi_{i \pm 1/2}$を$\phi_{i}$周りでTaylor級数展開し，差分を取る．
```math
\begin{align}
    \phi_{i \pm 1/2}
    &= \phi_{i} 
        \pm \frac{h}{2} \left. \frac{d \phi}{d x} \right|_{i}
        + \frac{1}{2!} \left( \frac{h}{2} \right)^2 \left. \frac{d^2 \phi}{d x^2} \right|_{i}
        + \mathcal{O} \left[ h^3 \right] \\
    \phi_{i + 1/2} - \phi_{i - 1/2}
    &= 2 \cdot \frac{h}{2} \left. \frac{d \phi}{d x} \right|_{i}
        + \mathcal{O} \left[ h^3 \right] \\
    \therefore
    \left. \frac{d \phi}{d x} \right|_{i}
    &= \frac{\phi_{i + 1/2} - \phi_{i - 1/2}}{h}
        + \mathcal{O} \left[ h^2 \right] \\
\end{align}
```
続いて，$\phi_{i + 1/2}$を$\phi_{i}$周りで，$\phi_{i - 1/2}$を$\phi_{i-1}$周りで，それぞれTaylor級数展開する（途中で2次精度の差分近似を含むので，実際の打ち切り誤差は2次まで含んでしまうだろうと思っている，どちらにせよ，後から2次の打ち切り誤差が支配するが）．
```math
\begin{align}
    \phi_{i + 1/2}
    &= \phi_{i} 
        + \frac{h}{2} \left. \frac{d \phi}{d x} \right|_{i}
        + \frac{1}{2} \left( \frac{h}{2} \right)^2 \left. \frac{d^2 \phi}{d x^2} \right|_{i}
        + \mathcal{O} \left[ h^3 \right] \\
    &= \phi_{i} 
        + \frac{h}{2} \frac{\phi_{i+1} - \phi_{i-1}}{2 h}
        + \frac{1}{2} \left( \frac{h}{2} \right)^2 \frac{\phi_{i+1} - 2 \phi_{i} + \phi_{i-1}}{h^2}
        + \mathcal{O} \left[ h^2 \right] \\
    &= \frac{3 \phi_{i+1} + 6 \phi_{i} - \phi_{i-1}}{8}
        + \mathcal{O} \left[ h^2 \right] \\
    \phi_{i - 1/2}
    &= \phi_{i-1} 
        + \frac{h}{2} \left. \frac{d \phi}{d x} \right|_{i-1}
        + \frac{1}{2} \left( \frac{h}{2} \right)^2 \left. \frac{d^2 \phi}{d x^2} \right|_{i-1}
        + \mathcal{O} \left[ h^3 \right] \\
    &= \frac{3 \phi_{i} + 6 \phi_{i-1} - \phi_{i-2}}{8}
        + \mathcal{O} \left[ h^2 \right] \\
\end{align}
```
したがって，元の式は，
```math
\begin{align}
    \left. \frac{d \phi}{d x} \right|_{i}
    &= \frac{\phi_{i + 1/2} - \phi_{i - 1/2}}{h}
        + \mathcal{O} \left[ h^2 \right] \\
    &= \frac{3 \phi_{i+1} + 3 \phi_{i} - 7 \phi_{i-1} + \phi_{i-2}}{8 h}
        + \mathcal{O} \left[ h^2 \right] \\
\end{align}
```
即ち，
```math
\begin{align}
    u \left. \frac{d \phi}{d x} \right|_{i}
    &= \frac{u + |u|}{2} \frac{3 \phi_{i+1} + 3 \phi_{i} - 7 \phi_{i-1} + \phi_{i-2}}{8 h} \\
    &+ \frac{u - |u|}{2}\frac{- 3 \phi_{i-1} - 3 \phi_{i} + 7 \phi_{i+1} - \phi_{i+2}}{8 h}
     + \mathcal{O} \left[ h^2 \right] \\
    &= u \frac{ - \phi_{i+2} + 10 \phi_{i+1} - 10 \phi_{i-1} + \phi_{i-2}}{16 h} \\
    &+ |u| \frac{h^3}{16} \frac{\phi_{i+2} - 4 \phi_{i+1} + 6 \phi_{i} - 4 \phi_{i-1} + \phi_{i-2}}{h^4}
     + \mathcal{O} \left[ h^2 \right] \\
\end{align}
```
を得る．Leaonardは，QUICKは3次精度であると主張しているが（[Leaonard1979](https://doi.org/10.1016/0045-7825(79)90034-3)），そしてそのように言われたりもするようだが（e.g., [Versteeg&Malalasekera1995](https://books.google.co.jp/books?id=uZBpQgAACAAJ)），実際は2次精度しかないのではないか，と思う．数値実験からも，QUICKは2次程度の速度で収束することが確認できる．

### KK
[Kawamura+1986](https://doi.org/10.1016/0169-5983(86)90014-6)が詳しい．

$\phi_{i-1}$と$\phi_{i-2}$を$\phi_{i}$周りでTaylor級数展開する．
```math
\begin{align}
    \phi_{i-1} 
    &= \phi_{i} 
    - h \left. \frac{d \phi}{d x} \right|_{i}
    + \frac{h^{2}}{2!} \left. \frac{d^2 \phi}{d x^2} \right|_{i}
    + \mathcal{O} \left[ h^3 \right] \\
    \phi_{i-2} 
    &= \phi_{i} 
    - 2 h \left. \frac{d \phi}{d x} \right|_{i}
    + \frac{(2 h)^{2}}{2!} \left. \frac{d^2 \phi}{d x^2} \right|_{i}
    + \mathcal{O} \left[ h^3 \right] \\
\end{align}
```
両者の差を取り，2階微分を除去し，1階微分の差分近似を考える．
```math
\begin{align}
    4 \phi_{i-1} - \phi_{i-2}
    &= 3 \phi_{i} 
    - 2 h \left. \frac{d \phi}{d x} \right|_{i}
    + \mathcal{O} \left[ h^3 \right] \\
    \therefore 
    \left. \frac{d \phi}{d x} \right|_{i}
    &= \frac{3 \phi_{i} - 4 \phi_{i-1} + \phi_{i-2}}{2 h}
    + \mathcal{O} \left[ h^2 \right] \\
\end{align}
```
より，
```math
\begin{align}
    u \left. \frac{d \phi}{d x} \right|_{i}
    &= \frac{u + |u|}{2} \frac{3 \phi_{i} - 4 \phi_{i-1} + \phi_{i-2}}{2 h} \\
    &+ \frac{u - |u|}{2} \frac{- 3 \phi_{i} + 4 \phi_{i+1} - \phi_{i+2}}{2 h}
    + \mathcal{O} \left[ h^2 \right] \\
    &= u \frac{- \phi_{i+2} + 4 \phi_{i+1} - 4 \phi_{i-1} + \phi_{i-2}}{4 h} \\
    &+ |u| \frac{h^3}{4} \frac{\phi_{i+2} - 4 \phi_{i+1} + 6 \phi_{i} - 4 \phi_{i-1} + \phi_{i-2}}{h^4}
    + \mathcal{O} \left[ h^2 \right] \\
\end{align}
```
ここで，第1項を見つめる．先ずは，$\phi_{i \pm 1}$と$\phi_{i \pm 2}$のTaylor級数展開を記す．
```math
\begin{align}
    \phi_{i \pm 1}
    &= \phi_{i} 
        \pm h \left. \frac{d \phi}{d x} \right|_{i}
        +   \frac{h^2}{2!} \left. \frac{d^2 \phi}{d x^2} \right|_{i}
        \pm \frac{h^3}{3!} \left. \frac{d^3 \phi}{d x^3} \right|_{i}
        + \mathcal{O} \left[ h^4 \right] \\
    \phi_{i \pm 2}
    &= \phi_{i} 
        \pm 2h \left. \frac{d \phi}{d x} \right|_{i}
        +   \frac{(2h)^2}{2!} \left. \frac{d^2 \phi}{d x^2} \right|_{i}
        \pm \frac{(2h)^3}{3!} \left. \frac{d^3 \phi}{d x^3} \right|_{i}
        + \mathcal{O} \left[ h^4 \right] \\
\end{align}
```
差分から，
```math
\begin{align}
    \phi_{i+1} - \phi_{i-1}
    &= 2h \left. \frac{d \phi}{d x} \right|_{i}
        + 2 \cdot \frac{h^3}{3!} \left. \frac{d^3 \phi}{d x^3} \right|_{i}
        + \mathcal{O} \left[ h^4 \right] \\
    \phi_{i+2} - \phi_{i-2}
    &= 2 \cdot 2h \left. \frac{d \phi}{d x} \right|_{i}
        + 2 \cdot \frac{(2h)^3}{3!} \left. \frac{d^3 \phi}{d x^3} \right|_{i}
        + \mathcal{O} \left[ h^4 \right] \\
\end{align}
```
より，
```math
\begin{align}
    \left. \frac{d \phi}{d x} \right|_{i}
    &= \frac{- \phi_{i+2} + 4 \phi_{i+1} - 4 \phi_{i-1} + \phi_{i-2}}{4h}
        + \mathcal{O} \left[ h^2 \right] \\
\end{align}
```
であるから，上式の第1項は，2次程度の精度であることが分かる．一方，係数を上手く選ぶと3次の項を取り除くことができ，これにより3次の打ち切り誤差を除去することができる．
```math
\begin{align}
    \left. \frac{d \phi}{d x} \right|_{i}
    &= \frac{- \phi_{i+2} + 8 \phi_{i+1} - 8 \phi_{i-1} + \phi_{i-2}}{12h}
        + \mathcal{O} \left[ h^3 \right] \\
\end{align}
```
したがって，先程の，移流項の2次精度近似を，新たに得た（係数を上手く選んだ）3次精度の近似で置き換えてしまおう，というのがKKスキームである．
```math
\begin{align}
    u \left. \frac{d \phi}{d x} \right|_{i}
    &= u \frac{- \phi_{i+2} + 8 \phi_{i+1} - 8 \phi_{i-1} + \phi_{i-2}}{12 h} \\
    &+ |u| \frac{h^3}{4} \frac{\phi_{i+2} - 4 \phi_{i+1} + 6 \phi_{i} - 4 \phi_{i-1} + \phi_{i-2}}{h^4}
    + \mathcal{O} \left[ h^3 \right] \\
\end{align}
```
重みと除算を少し書き換えただけだが，3次精度まで上昇している．Gauss波を移流させる数値実験からも，KKは3次の速度があることが確認できる．