<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Younglin's CFD Blog (ja)</title>
    <description>圧縮性多相流CFD研究者の作業ノート — 数式、コード、インタラクティブ可視化</description>
    <link>https://cfdblog.cc/ja</link>
    <atom:link href="https://cfdblog.cc/feed-ja.xml" rel="self" type="application/rss+xml"/>
    <language>ja-JP</language>
    <managingEditor>noreply@cfdblog.cc (Younglin)</managingEditor>
    <lastBuildDate>Sun, 03 May 2026 20:09:47 GMT</lastBuildDate>
    <ttl>1440</ttl>
    <item>
      <title><![CDATA[陰解法とトーマス法 — 1次元拡散を無条件安定で解くひと筋のトリック]]></title>
      <description><![CDATA[陽解法が爆発する壁の向こう、三重対角を1回解くだけで安定性を買える

[4 min read · 1,967 words]]]></description>
      <content:encoded><![CDATA[import { HeatDiffusionExplicitVsImplicit1D } from '@/components/post-viz/2026-05-04-implicit-diffusion-thomas-algorithm/HeatDiffusionExplicitVsImplicit1D'

夜の11時にシミュレーションを回して、翌朝出社して結果ファイルを開いたら画面いっぱいNaNだった、という経験があります。直前に格子を倍に細かくして、時間刻み幅をそのままにしていた。CFL(Courant–Friedrichs–Lewy)条件を忘れた代償は、クラスタ1時間分の請求書でした。

陽解法の拡散方程式は格子幅を半分にすると時間刻みを4分の1にしないといけません。1024点の問題を解くのに、爆発しないという理由だけで数十万ステップを刻むことになる。本記事では、その縛りをひと言で抜ける陰解法(implicit method)と、1次元では陰解法のコストをほぼ消してくれるトーマス法(三重対角ソルバー)を扱います。最後に自分でdtを上げ、陽解法が発散しても陰解法は穏やかなままの様子を見ます。

CFLが細格子を縛る

拡散方程式は次の通りです。

[equation]

ここで [math] は濃度(または温度)、[math] は拡散係数です。最も素朴な陽解法(forward Euler + 中心差分)は

[equation]

安定であるためには [math] が必要です。von Neumann解析を一行でまとめると、最短波長(波長 [math])の増幅率が [math] で、これを [math] にするには [math] が強制されます。

問題はこの条件が [math] の 2乗 に縛られていること。格子を [math] にすると [math] は4分の1。これは桁の暴力です。

未来値を右辺へ — 陰解法の単純な仕掛け

解決策は呆気ないほど単純です。右辺の [math] を [math] に書き換えます。

[equation]

未来値が右辺にあるので、セルを順に解くことはできません。すべてのセルが同時に結合して、行列方程式になります。

[equation]

代わりに見返りは大きい。同じvon Neumann解析で増幅率は [math]、任意の正の [math] で1未満です。つまり [math] をどれだけ大きくしても発散しません — 無条件安定(unconditionally stable)です。

代償は精度。極端に大きい [math] は安定でも正確ではありません。それでも「発散しない」という保証は、コードを回す人間に精神衛生をもたらします。

三重対角行列とトーマス法のひと撫で

行列 [math] を書き出してみます。1次元ではセル [math] が [math] と [math] にしか結合しないので

[equation]

これは 三重対角(tridiagonal) 行列です。3本の対角しかゼロでない。一般のガウス消去法は [math] ですが、三重対角なら [math] で終わります。このアルゴリズムをトーマス法と呼びます — 1949年にLlewellyn ThomasがIBMの社内メモにまとめたものです。

トーマス法の核は2段階。

1. 前進消去 — 副対角を順に消しながら、新しい対角 [math] と右辺 [math] を計算します。
2. 後退代入 — 最終行から逆に値を代入します。

各段…

---
Read more: https://cfdblog.cc/ja/posts/2026-05-04-implicit-diffusion-thomas-algorithm]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-05-04-implicit-diffusion-thomas-algorithm</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-05-04-implicit-diffusion-thomas-algorithm</guid>
      <pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>수치해석</category>
      <category>implicit</category>
      <category>diffusion</category>
      <category>Thomas-algorithm</category>
      <category>stability</category>
    </item>
    <item>
      <title><![CDATA[[論文レビュー] 音速が発散しても時間ステップは生き残る — Orlando–Bonaventura(2024) 非理想気体向け AP-IMEX]]></title>
      <description><![CDATA[低マッハ・任意の状態方程式で時間ステップを音速に縛らない AP-IMEX-DG スキームのレビューと NumPy での再現

[5 min read · 2,583 words]]]></description>
      <content:encoded><![CDATA[import { APIMEXAcousticPulse1D } from '@/components/post-viz/2026-05-03-orlando-bonaventura-ap-imex-nonideal-gas/APIMEXAcousticPulse1D'

大気モデルはマッハ 0.001、宇宙の爆発シミュレーションはマッハ 100です。一つのソルバで両方を解きたいという欲望は半世紀続いています。Orlando と Bonaventura の 2024 年論文(arXiv:2402.09252v4)は、その欲望を非理想気体へと押し進めます。鍵は二つです。時間離散化で圧力項だけを陰的に扱えば、時間ステップが音速から解放されます。そしてこの解放は SG-EOS でも一般三次状態方程式(Van der Waals, Peng–Robinson)でも崩れません。

30 秒サマリー

- 著者: Giuseppe Orlando, Luca Bonaventura
- 所属: École polytechnique / Politecnico di Milano
- arXiv: 2402.09252v4 (2025-10-22 v4)
- 目的: 任意のマッハ数・任意の EOS で漸近保存(AP)時間積分を実現する
- 空間離散化: Discontinuous Galerkin
- 検証: 等エントロピー渦・Gresho 渦・RT 不安定性・遷音速衝撃 — SG-EOS と三次 EOS に拡張

陽的スキームが壊れる二つの場所

陽的時間積分は、二つの時間スケールがぶつかる場所で二度壊れます。

一つ目は音速です。圧縮性 Euler では信号が [math] で伝わりますが、[math] が小さくなると [math] が [math] を圧倒します。陽的 CFL は [math] に縛られ、[math] では時間ステップが 100 分の 1 になります。大気・海洋シミュレーションがよく落ちる罠です。

二つ目は EOS の非線形性です。理想気体なら [math] で終わりますが、三次 EOS では [math] が [math] の非線形関数になります。陽的スキームが音速を見誤るとセルが負圧に落ち、EOS そのものが定義不能になります。

本論文は二つの問題を一つの束として捉えます。陽的な音響項を陰的側に移せば一つ目の罠から抜け出し、その陰的処理を EOS に依存しない形で書けば二つ目もついてきます。

漸近保存が意味するもの

AP(asymptotic-preserving)は一行でこうです。連続モデル [math] が [math] で極限モデル [math] に収束するとき、離散化 [math] も同じ極限で [math] に整合的に収束する必要があります。さらに安定条件は [math] に無関係でなければなりません。

ここで [math] は [math] で、[math] は非圧縮 Euler です。馴染みのある形で書けば

[equation]

[math] が 0 次(非圧縮極限)、[math] が 1 次補正、[math] が 2 次補正です。AP スキームなら離散解も同じ階層を保ちます。

数値的な意味は明快です。[math] で測った圧力変動は [math] のスケールであるべきです。陽的 Roe スキームはこれを実現できません。格子解像度に関係なく [math] のノイズを生みます(Guillard–Vioza…

---
Read more: https://cfdblog.cc/ja/posts/2026-05-03-orlando-bonaventura-ap-imex-nonideal-gas]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-05-03-orlando-bonaventura-ap-imex-nonideal-gas</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-05-03-orlando-bonaventura-ap-imex-nonideal-gas</guid>
      <pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>논문리뷰</category>
      <category>asymptotic-preserving</category>
      <category>IMEX</category>
      <category>low-mach</category>
      <category>Discontinuous-Galerkin</category>
      <category>non-ideal-gas</category>
    </item>
    <item>
      <title><![CDATA[[論文レビュー] 振幅の小さい方を選べ — Deng (2018) MUSCL-THINC-BVD によるインターフェース再構成]]></title>
      <description><![CDATA[二つの候補再構成関数のうちセル境界での変動が小さい方を選ぶBVD原理

[5 min read · 2,632 words]]]></description>
      <content:encoded><![CDATA[import { MUSCLTHINCBVDPicker } from '@/components/post-viz/2026-05-02-muscl-thinc-bvd-interface-reconstruction/MUSCLTHINCBVDPicker'

東京工業大学のXiaoグループは2018年、誰もあまり公表しない測定をひとつ行いました。圧縮性二相流のシミュレーションを1000ステップ走らせ、終了時のインターフェース厚さを測ったのです。最初は1セルだったジャンプが、8セルに広がっていました。WENOを使っても結果は似ていました。1ステップあたりの数値拡散が小さく見えるスキームでも、長時間にわたる累積でインターフェースは崩れます。本記事では、この問題に対する彼らの答えである MUSCL-THINC-BVD 再構成を整理します。発想はシンプルです。各セルで 二つの再構成候補 を同時に作り、セル境界でのジャンプが小さい方 を採用するのです。

一ページ要約

- 著者・誌名: Deng, Inaba, Xie, Shyue, Xiao. Journal of Computational Physics 371 (2018) 945–966.
- 対象問題: 五方程式モデルで解く圧縮性二相流において、物質界面が時間とともにぼやけていく現象。
- 提案: 各セルで MUSCL(滑らか領域用)と THINC(ジャンプ用)の二つの再構成を同時に作り、セル境界での変動が小さい方を採用する BVD (Boundary Variation Diminishing) アルゴリズム。
- 新しい点: 後処理の anti-diffusion や人工圧縮が不要。同じ BVD 規則を体積分率と他の保存量すべてに適用するため、変数間の整合性が自動的に取れる。

衝突する二つの要求

圧縮性二相流の数値計算は、二つのことを同時に要求します。滑らかな領域では精度が高く拡散が少ないこと。ジャンプ(界面、衝撃波)では単調性と薄さ。一つの関数で両方をうまくこなすのは難しいです。

MUSCL は区分線形再構成です。単調性を保証しますが、微分は1次しか追従しません。界面を通るたびに少しずつ削り、それが累積するとジャンプが広がります。THINC は tanh をセル内に当てはめてステップを1セルに閉じ込めますが、滑らかな領域に使うと偽の階段を作ります。

論文の出発点は決断です。二つを混ぜて一つにせず、各セルでどちらかを選ぶ。

MUSCL — 信頼できるディフューザー

基準となる候補は minmod スロープリミッタを用いた MUSCL です。

[equation]

ここで [math] はセル平均、[math] はセル中心でのスロープ、minmod は両差分の符号が同じなら絶対値の小さい方、異なれば0を返すリミッタです。

候補のセル境界値:

[equation]

どこでも安全に動きます。振動はないが、ジャンプ部の厚さがゆっくり広がります。

THINC — ジャンプを真似る単調関数

THINC (Tangent of Hyperbola for INterface Capturing) はセル内のジャンプを双曲線正接で当てはめます。

[equation]

[math] は隣接セルから取った最小値と振幅、[math] はジャンプ方向、[math] はジャンプの厚さを制御するパラメータ、[math] はセル平均が保存されるよう解かれるジャンプ中心です。

[m…

---
Read more: https://cfdblog.cc/ja/posts/2026-05-02-muscl-thinc-bvd-interface-reconstruction]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-05-02-muscl-thinc-bvd-interface-reconstruction</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-05-02-muscl-thinc-bvd-interface-reconstruction</guid>
      <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>논문리뷰</category>
      <category>compressible-multiphase</category>
      <category>MUSCL</category>
      <category>THINC</category>
      <category>BVD</category>
      <category>interface-capturing</category>
    </item>
    <item>
      <title><![CDATA[特性線がぶつかると衝撃波が生まれる — Burgers 方程式と (x,t) 平面]]></title>
      <description><![CDATA[非線形な自己移流が、なめらかな曲線をどう衝撃に砕くのか

[5 min read · 2,397 words]]]></description>
      <content:encoded><![CDATA[import { BurgersShockBirth } from '@/components/post-viz/2026-05-01-burgers-characteristics-shock-formation/BurgersShockBirth'

1948 年、オランダの物理学者 J. M. Burgers は乱流のモデルとして一行の方程式を投げた。なめらかな曲線が外力なしに有限時間で垂直の崖に砕けるという、非線形双曲型 PDE の最短ドラマです。本稿では、特性線(characteristic、情報が流れる時空曲線)の幾何から衝撃形成時刻を手計算し、弱解(weak solution、微分可能性が壊れる場所で積分形により定義される解)が多価領域を一本で切り落とす仕組みを整理し、Python 60 行で同じ図を再現します。最後に、(x,t) 平面で直線がぶつかる様子を直接いじることができます。

直線が同じ点で出会う

双曲型方程式は信号伝搬の話です。情報が一定速度で特性線に沿って流れる限りは平和です。線形移流 [math] で [math] が定数なら、特性線は平行な直線で初期形状はそのまま横に滑ります。この絵には衝撃波の入る余地がありません。

非線形性が入ると一変します。[math] が [math] 自身に依存すると、大きな値は速く、小さな値はゆっくり進みます。速い部分が遅い部分を追い越した瞬間、(x,t) 平面の同じ点に二つの値が同時に届く。関数が多価(multi-valued)になる、すなわち物理的にあり得ない状態になる、その瞬間が衝撃波の誕生です。

自分自身を運ぶ方程式

Burgers 方程式の保存形は次の通りです。

[equation]

[math] は保存スカラー、[math] がフラックスです。連鎖律で展開すると非保存形が得られます。

[equation]

移流速度は [math]。自分自身が自分自身を運ぶ構造です。この一つの非線形性がすべてのドラマの源です。ヤコビアン [math] が正の場所では信号は右へ、負の場所では左へ進みます。空間で符号が変わるような分布 — 正弦波がその典型 — では、速い場所が遅い場所を追いかけます。

特性線が描く (x,t) 平面

特性線は [math] を満たす曲線です。共動微分 [math] がそこで 0 なので、[math] は出発値で凍結されます。結果として特性線は、(x,t) 平面における 傾き [math] の直線 です。出発点 [math] における初期値 [math] がその直線の速度になります。

初期条件 [math] では:

- 山([math])から出る直線は急に右へ傾く(速い)
- 谷([math] で素朴な解析は同じ [math] に三つの [math] を返します。物理的に不可能です。打開策が 弱解 です。微分形を捨て、保存則の積分形で定義をゆるめます。

[equation]

これは [math] が微分不可能 — つまり不連続 — でも意味を持ちます。二つの平坦な状態 [math]、[math] が衝撃で結ばれ速度 [math] で進むとすると次が従います。

[equation]

これが Rankine–Hugoniot 条件 です。衝撃速度は両状態の算術平均。この条件が多価領域を一本で切り、両側の切り取り面積が等しくなる(equal-area rule)ように調整します。

加えてエントロピー条件が必要です。物理的な衝撃は [mat…

---
Read more: https://cfdblog.cc/ja/posts/2026-05-01-burgers-characteristics-shock-formation]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-05-01-burgers-characteristics-shock-formation</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-05-01-burgers-characteristics-shock-formation</guid>
      <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Burgers</category>
      <category>hyperbolic</category>
      <category>shock</category>
      <category>characteristics</category>
      <category>수치해석</category>
    </item>
    <item>
      <title><![CDATA[20℃の水も沸く — キャビテーションの物理]]></title>
      <description><![CDATA[減圧で起こる沸騰、キャビテーション数、気泡崩壊の衝撃波。

[5 min read · 2,542 words]]]></description>
      <content:encoded><![CDATA[import { VenturiCavitationFlow } from '@/components/post-viz/2026-04-30-cavitation-number-vapor-pressure/VenturiCavitationFlow'

水は20℃でも沸きます。圧力を十分に下げさえすれば、です。「水の沸点は100℃」という暗記には「1気圧で」という前提がこっそり省かれています。沸騰を決めるのは温度ではなく、飽和蒸気圧と周囲圧力のバランスです。ポンプ羽根車の入口や船舶プロペラの先端で水が加速され静圧が下がると、常温の水でもいきなり沸き始めます。これがキャビテーション(cavitation, 空洞現象) です。本記事ではキャビテーションが始まる理由、危険度を一つの数で測る方法、気泡が消える瞬間に1万気圧級の衝撃波が立ち上がる仕組みを整理します。最後にベンチュリ管でキャビテーション領域を予測する短いPythonコードと、自分で操作できるシミュレータを置いておきます。

沸点を決めるのは温度ではない

水の飽和蒸気圧は温度の関数です。

| 温度 | 飽和蒸気圧 [math] |
|---|---|
| 20℃ | 2.34 kPa(≈ 17.5 mmHg) |
| 60℃ | 19.9 kPa |
| 100℃ | 101.3 kPa(≈ 760 mmHg) |
| 200℃ | 1554 kPa(≈ 15 atm) |

100℃が特別な数字に見えるのは、ちょうどその温度で [math] が1気圧と一致するからです。圧力鍋(約2気圧)では沸点が120℃に上がり、エベレスト山頂(0.3気圧)では70℃で沸きます。

論理を逆にたどってみましょう。20℃の水を沸かしたければ、外気圧を約2.5 kPa(1気圧の1/40)まで下げればよいのです。台所に真空ポンプが一台あれば、ぬるい水を沸騰させられます。

問題は、流れる水には真空ポンプがいらない点です。

流れが作る低圧 — Bernoulliの影

非粘性・定常流の流線に沿ってベルヌーイの式が成り立ちます。

[equation]

[math] は静圧、[math] は密度、[math] は速度、[math] は高さです。同じ高さなら、速度が上がる場所では静圧が下がります。ベンチュリ管の喉部、翼の負圧面、ポンプ羽根車の入口 — 流れが加速される場所はどこでも圧力が同時に落ち込みます。

極端な場合、静圧が作動温度における [math] を下回ると、液体は液体としての姿を保てません。ガス核を種として蒸気の気泡が爆発的に成長します。これがキャビテーションが生まれる瞬間です。

要点は一行。キャビテーションは加熱ではなく、流体力学的減圧で起こる沸騰なのです。

キャビテーション数 σ — 危険度を一つの数で測る

設計者は「このポンプはキャビテーションするか?」という問いを一つの無次元数に集約します。キャビテーション数です。

[equation]

[math] は基準位置の静圧、[math] は基準速度、[math] は作動温度の飽和蒸気圧です。分子は「蒸気圧の上に残る圧力余裕」、分母は「流れが作り得る動圧の上限」を表します。

[math] が大きいほど安全です。流れがどんなに加速しても、動圧を全部使っても蒸気圧に届かないからです。[math] が臨界値 [math] を下回るとキャビテーションが発生し始めます(initiation)。翼や羽根車の形状ごとに [math] は異なり、…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-30-cavitation-number-vapor-pressure]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-30-cavitation-number-vapor-pressure</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-30-cavitation-number-vapor-pressure</guid>
      <pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>유체역학</category>
      <category>Cavitation</category>
      <category>Multiphase</category>
      <category>Bernoulli</category>
      <category>유동현상</category>
    </item>
    <item>
      <title><![CDATA[SPHで流体を解く ― カーネルから人工粘性まで]]></title>
      <description><![CDATA[格子なしで粒子に流体方程式を解かせるSPHの原理、コード、落とし穴

[5 min read · 2,502 words]]]></description>
      <content:encoded><![CDATA[import { SPHParticleDrop2D } from '@/components/post-viz/2026-04-29-sph-meshfree-particle-hydrodynamics/SPHParticleDrop2D'
import { SPHKernelShapeExplorer } from '@/components/post-viz/2026-04-29-sph-meshfree-particle-hydrodynamics/SPHKernelShapeExplorer'

1992年、Joe Monaghan は天体物理のレビュー論文で挑発的な提案を投げかけました。星の周りに格子を敷くのをやめ、ガスを数千個の重なり合う粒子としてばら撒き、互いに圧力場を介して相互作用させようというものです。それから30年が経ち、Smoothed Particle Hydrodynamics(SPH)は天体物理、自由表面流、衝突シミュレーションの分野で静かに、しかし確固たる地位を占めています。本記事では SPH を成立させる4つの方程式と、しばしば踏むことになる落とし穴を追いかけ、ブラウザ上で粒子を実際に動かしてみます。

格子のない流体 ― SPHの出発点

オイラー法は座標を空間に固定して、その上を流れが通り過ぎる様子を見ます。SPH は逆です。座標軸を流れに固定し、各粒子が自分の位置で速度と密度を持ち運びます。ラグランジュ表示での連続式と運動量方程式は次の通りです。

[equation]

ここで [math] は密度、[math] は速度、[math] は圧力、[math] は重力です。粒子に乗って見ると左辺の時間微分はただの [math] になります。問題は右辺の空間微分です。規則的な隣接点を持たない粒子の集合で [math] をどう計算するか ― これが SPH の出発点です。

カーネル W(r, h) ― 粒子が作る仮想体積

答えは畳み込みです。粒子 [math] の周囲にベル形の関数 [math] を置き、任意の場 [math] を隣接粒子の重み付き和で近似します。

[equation]

[math] は粒子質量、[math] は密度、[math] はスムージング長です。比 [math] は粒子 [math] が占める体積として解釈されます。微分も同様に ― [math]。格子上の微分がカーネルの微分に置き換わりました。

カーネルは積分が1で、[math] のときディラックのデルタに収束する必要があります。よく使われるのは [math]r = 2h[math]r[math]i[math]\rho0[math]K[math]\gamma = 7[math]c0 = \sqrt{\gamma K / \rho0}[math]K[math]j[math]i[math]i[math]j[math][math]K[math]\mu[math]hi[math]fi[math]\delta[math]h$ がコストと精度を同時に握ります。次に自由表面や爆発のシミュレーションに直面したら、適応格子を増設する代わりに1万個の浮遊粒子という選択肢を思い出してみてください。

参考文献

- Monaghan, J. J. (1992). Smoothed Particle Hydrodynamics. Annual Review of Astronomy and Astrophysics, 30, 543.
- Monag…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-29-sph-meshfree-particle-hydrodynamics]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-29-sph-meshfree-particle-hydrodynamics</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-29-sph-meshfree-particle-hydrodynamics</guid>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>SPH</category>
      <category>Meshfree</category>
      <category>Lagrangian</category>
      <category>Multiphase</category>
      <category>Astrophysics</category>
    </item>
    <item>
      <title><![CDATA[渦の二つの顔 — 自由渦・強制渦、そしてヘルムホルツ]]></title>
      <description><![CDATA[風呂場の渦から竜巻まで、渦度とは何を測っているのか

[5 min read · 2,388 words]]]></description>
      <content:encoded><![CDATA[import { RankineVortexExplorer } from '@/components/post-viz/2026-04-28-rankine-vortex-helmholtz/RankineVortexExplorer'

風呂の栓を抜くと水がぐるぐる回ります。私たちはその光景を「水が回転している」と呼びます。けれども流体力学者は、その領域の大部分について「ここでは回転は起きていない（irrotational）」と答えます。一見矛盾するこの言い方の中に、渦（vortex）の本当の姿が隠れています。本稿では同じ絵の中に共存する自由渦（free vortex、[math] 速度）と強制渦（forced vortex、[math] 速度）を切り分け、渦度（vorticity、流体粒子の自転角速度の二倍）が何を測っているのかを示し、ヘルムホルツの定理が渦を「不滅」と呼ぶ理由までたどります。

風呂の渦は本当に「回転」なのか

「回転」という一語に二つの意味が混ざっています。一つ目は 公転 — ある点を中心に円運動する。二つ目は 自転 — 粒子自身が軸の周りを回る。風呂の渦で水の粒子は公転します。けれど自転は？ 排水口から離れた領域ではほとんど起きません。水面に浮かぶ小さな葉は円形の経路を描きながらも、自分自身は回らず、いつも同じ面が排水口を向いています。

流体力学で「回転」とは自転のことです。だから自由渦は中心点を除く全域で「回転なし」と分類されます。

強制渦と自由渦：同じ絵、違う魂

回転する容器の中の水を長く混ぜ続けると、液体全体が剛体のように一緒に回ります。これを 強制渦 と呼びます。粒子は公転と同時に自転しています。

[equation]

ここで [math] は接線速度、[math] は剛体回転の角速度、[math] は中心からの距離です。速度が距離に比例します。

一方、粘性を無視した理想流体で自然に生じる渦は 自由渦（=ポテンシャル渦）です。

[equation]

[math] は 循環（circulation）— 閉じた経路に沿った速度の線積分です。速度は [math] で減衰し、中心では発散します。この特異点を実流体では粘性が和らげます。

| | 強制渦 | 自由渦 |
|---|---|---|
| 速度 | [math] | [math] |
| 自転 | あり | なし |
| エネルギー供給 | 連続的 | 最初の一度だけ |
| 身近な例 | かき混ぜたカップ | 風呂・竜巻 |

同じ円形の流れでも自転の有無が逆。この差を一つの量で測るのが渦度です。

渦度が測るもの

渦度 [math] は速度場の回転（curl）です。

[equation]

二次元では [math] 成分だけが残り

[equation]

となります。[math] はそれぞれ [math] 方向の速度成分。この値は 流体粒子の自転角速度の二倍 に等しいです。

強制渦に代入すると [math] で一定 — 領域全体が自転しています。自由渦に代入すると、中心点以外では [math]。同じ丸い流線でも、自転の様子は正反対です。

ランキン組合せ渦 — 竜巻の青写真

現実の渦はどちらか片方だけに従いません。中心付近では粘性が強く剛体のように回り、遠方では粘性が無視されて自由渦の法則に従います。これらをつないだモデルが ランキン組合せ渦 です。

[equation]

[math] はコア半径、[math] はコア境界で…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-28-rankine-vortex-helmholtz]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-28-rankine-vortex-helmholtz</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-28-rankine-vortex-helmholtz</guid>
      <pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Vortex</category>
      <category>Vorticity</category>
      <category>유체역학</category>
      <category>유동현상</category>
      <category>Helmholtz</category>
    </item>
    <item>
      <title><![CDATA[クアッドツリー AMR — 格子を必要な場所だけ育てる]]></title>
      <description><![CDATA[Berger–Oliger 以来 40 年の適応格子データ構造と細分化基準のまとめ

[6 min read · 2,857 words]]]></description>
      <content:encoded><![CDATA[import { AMRQuadtreeRefinement } from '@/components/post-viz/2026-04-27-amr-quadtree-cell-refinement/AMRQuadtreeRefinement'

1984 年、スタンフォードの Marsha Berger と Joseph Oliger は衝撃波追跡で行き詰まっていました。100 万セルを敷いても、衝撃波付近のおよそ 1% のセルしか意味のある仕事をしていません。残り 99% は均一な自由流を高精度で再計算し続けていました。その年に Journal of Computational Physics に投稿された論文が Berger–Oliger AMR の出発点であり、同じ発想は今も OpenFOAM の dynamicRefineFvMesh、AMReX、Chombo、p4est の中で生き続けています。本記事ではその核心である クアッドツリーのデータ構造 と 細分化基準 を順に追い、Python で 1D 適応格子を回したあと、ブラウザでセルが分裂していく様子を眺めます。

均一格子はなぜ 90% も無駄になるのか

3D の圧縮性 RANS を一度でも回したことがあれば、このトレードオフはおなじみです。格子を半分に粗くすればステップ当たりのコストは 8 倍下がりますが、衝撃波・せん断層・剥離のような勾配の大きい領域の解像度も同時に崩れます。逆にその領域に合わせて全体を細かくすると自由流のセルまで小さくなり、メモリと時間が同時に膨れ上がります。

解は単純です。必要な場所だけ細かく。定量的には次の比率が役に立ちます。

[equation]

ここで [math] は最大細分化レベル、[math] は細かく解くべき領域の体積、[math] は全体ドメインの体積です。衝撃波のような 1 次元的な特異面なら [math] となり、レベル 5 の均一格子と比べてセル数が一桁パーセントまで落ちます。

h-, p-, r-: 適応化の三つの流派

適応格子(adaptive mesh、解の分布に応じて自身が変化する格子)は、何を変えるかで 3 つに分かれます。

- h-adaptivity: セルサイズ [math] を縮める。最も直感的でよく使われる。一般に AMR と言えばこれを指します。
- p-adaptivity: セルサイズはそのままで多項式次数 [math] を上げる。DGM・SEM(spectral element method)系で多く見ます。
- r-adaptivity (relocation): セル数も次数もそのままで節点を勾配の大きい側へ移動させる。メモリ変動がない反面、格子の歪み管理が難しい。

本記事は最も使用頻度の高い h-AMR、特に 2D クアッドツリー(3D ではオクツリー)に焦点を当てます。

クアッドツリー — セルが子を持つデータ構造

均一格子は 1 次元配列ひとつで足ります。適応格子には 木構造 が必要です。あるセルが細分化されると 4 つの子セルが生まれ、各子は親を指します。子がさらに細分化されれば孫が生まれます。

[code block]

split で子セルを親と同じ値で初期化するのは 保存性 のためです。親セルの積分量 [math] は 4 つの子の和と等しくなければなりません。単純複製は 1 次精度の補間にあたり、実務では親の傾き(slope)も併用する MUSCL 型補間が使われま…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-27-amr-quadtree-cell-refinement]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-27-amr-quadtree-cell-refinement</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-27-amr-quadtree-cell-refinement</guid>
      <pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>AMR</category>
      <category>쿼드트리</category>
      <category>메시</category>
      <category>알고리즘</category>
      <category>수치해석</category>
    </item>
    <item>
      <title><![CDATA[[論文レビュー] 嵐が来る前にシミュレーションを終わらせる — Casulli–Walters(2000) 非構造直交格子の浅水方程式]]></title>
      <description><![CDATA[大きな時間刻みでも発散しない半陰解法の浅水アルゴリズム

[5 min read · 2,542 words]]]></description>
      <content:encoded><![CDATA[import { ShallowWaterCasulli1D } from '@/components/post-viz/2026-04-26-casulli-walters-unstructured-shallow-water/ShallowWaterCasulli1D'

ハンブルクの BAW 研究所は 1990 年 6 月の Jade–Weser 河口の 13 日分の潮位を再現する必要がありました。格子は非構造三角形 15 万個、時間刻みは 5 分、しかも実時間より速く回らないと次のケースに時間が残りません。陽解法では自由表面波のセラリティ [math] が CFL を決め、深さ 28 m の領域で [math] m/s、最小セル一辺が [math] m なら陽解法限界は 0.2 秒 — 13 日で 560 万ステップになります。この記事では Casulli と Walters(2000) がその壁を破った 半陰解法の非構造直交格子アルゴリズム をたどり、1D 縮約版を実際に動かします。要点は「圧力項だけを陰解にし、結果として現れる行列が SPD だから PCG で解ける」です。

論文メタデータ
- 著者: Vincenzo Casulli (Univ. of Trento), Roy A. Walters (USGS)
- 誌名: International Journal for Numerical Methods in Fluids, 32, 331–348 (2000)
- 題目: "An unstructured grid, three-dimensional model based on the shallow water equations"
- キーワード: semi-implicit, shallow water, unstructured orthogonal grid, wetting/drying

なぜ陽解法は河口で行き詰まるのか

浅水方程式の自由表面波は速いです。深さ 10 m で [math] m/s、深さ 100 m で [math] m/s。流速 [math] は普通 1 m/s 未満なので、現象の時間スケールは [math] なのに、陽解法は [math] で縛られます。両者の比 [math] ですから、陽解法は流れが必要とする 10 〜 30 倍細かく時間を切らねばなりません。

非構造格子だと事態はさらに悪化します。河口の格子には大きさの違うセルが混じり、最小セルが大域時間刻みを決めます。Big Lost River 格子は 1.2 km × 1 km の領域に 12,622 個の三角形、最小辺は約 5 m なので陽解法限界は 0.5 秒程度です。

解決策は「遅い項は陽、速い項は陰」です。自由表面の圧力勾配だけを陰解に処理すれば、自由表面波のセラリティが安定性条件から消えます。

直交非構造格子 — Voronoi–Delaunay の対

非構造格子に普通の有限差分をそのまま当てると 2 つの壁にぶつかります。セル間距離がセル形状で変わり、勾配近似が非対称になります。曲線座標変換は新しい項を生み、精度と安定性を損ないます。

Casulli と Walters は迂回路を取りました。直交非構造格子(orthogonal unstructured grid) — 隣接 2 セルの中心を結ぶ線分が、共有する辺と直交する格子です。Voronoi 多角形とその双対 Delaunay 三角分割は、鋭角三…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-26-casulli-walters-unstructured-shallow-water]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-26-casulli-walters-unstructured-shallow-water</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-26-casulli-walters-unstructured-shallow-water</guid>
      <pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>논문리뷰</category>
      <category>shallow-water</category>
      <category>semi-implicit</category>
      <category>unstructured-grid</category>
    </item>
    <item>
      <title><![CDATA[[論文レビュー] WENOが小さな渦をなめてしまう時 — Fu(2019) TENO低散逸有限体積法]]></title>
      <description><![CDATA[5次WENO-JSが滑らかな領域でも過剰に散逸する理由と、TENOが鋭いカットオフでそれを解決する方法

[5 min read · 2,476 words]]]></description>
      <content:encoded><![CDATA[import { TENOvsWENOAdvection1D } from '@/components/post-viz/2026-04-25-teno-low-dissipation-shock-capturing/TENOvsWENOAdvection1D'

Stanford Center for Turbulence ResearchでLin Fuが乱流の直接数値シミュレーションを回していたら、奇妙なことに気づきました。5次WENO-JSは衝撃波をきちんと捉えるものの、衝撃波から離れた小さな渦も時間とともにぼやけていきます。スキームは5次精度を謳っているのに、実際の解像度は3次中心差分のような感触でした。この記事では、その原因を突き止めたFu(2019)論文をレビューし、同じ初期条件でWENO-JSとTENO-5を並列に動かして比較します。結論を先に言えば「非線形重みの連続性が隠れたコストだった」ということです。

論文情報と背景

- 著者: Lin Fu(Stanford Center for Turbulence Research)
- 学術誌: Computer Physics Communications 235 (2019) 25–39
- DOI: 10.1016/j.cpc.2018.10.009
- キーワード: TENO, High-order schemes, Shock-capturing, Low-dissipation, Finite-volume method

WENO-JSの隠れた損失

古典的なWENO-JS(Jiang–Shu, 1996)は、3つの小ステンシル[math]それぞれで滑らかさ指標[math]を計算し、非線形重みで多項式を混ぜ合わせます。

[equation]

ここで[math]は5次精度を回復するための最適線形重み、[math]はゼロ除算を防ぐ定数です。問題は、この重みが連続的だという点にあります。ステンシルがほんの少しぶれるだけで、理想的には[math]を保つべき滑らかな領域でも[math]がわずかに動き、本来より低次のステンシルに重みが乗ります。

結果として、滑らかな波が数十ステップ進むうちに振幅が削られ、位相誤差が蓄積します。LES(大型渦シミュレーション)のように衝撃波と乱流渦が共存するシミュレーションでは、この散逸は致命的です。

TENOの2つのアイデア: 強いスケール分離とシャープカットオフ

Fuは2つの変更を加えました。

第一に、ステンシル構成を変えました。3つの小3点ステンシル[math]に加え、1つの大きな5点ステンシル[math]を別に置きます。[math]がクリーンであればそれで終了 — 他のステンシルは使いません。

第二に、重みを二値化しました。滑らかさの判定はカットオフパラメータ[math]で行います。

[equation]

$[math]CT = 10^{-5}[math]CT[math]10^{-3}[math]10^{-7}[math]CT[math]CT[math]CT = 10^{-5}[math]10^{-6}[math]S3[math]\beta3[math]\deltak[math]CT[math]CT[math]\beta[math]wk[math]CT[math]CT$一つで安定性と低散逸性が天秤にかかるため、格子収束とともに感度分析を必ず行うべきです。

---
Read more: https://cfdblog.cc/ja/posts/2026-04-25-teno-low-dissipation-shock-capturing]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-25-teno-low-dissipation-shock-capturing</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-25-teno-low-dissipation-shock-capturing</guid>
      <pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>논문리뷰</category>
      <category>TENO</category>
      <category>WENO</category>
      <category>shock-capturing</category>
      <category>high-order</category>
    </item>
    <item>
      <title><![CDATA[Lax–Wendroffが段差で震えた — Flux Limiterで2次TVD移流スキームを作る]]></title>
      <description><![CDATA[Godunovの定理を迂回して単調な2次移流スキームを作る方法

[4 min read · 2,099 words]]]></description>
      <content:encoded><![CDATA[import { LimiterAdvection1D } from '@/components/post-viz/2026-04-24-flux-limiter-tvd-advection/LimiterAdvection1D'

あるテストケースで、段差の前後に妙なこぶが立ち上がった。線形移流方程式(linear advection、定数速度場による純粋な並進)をLax–Wendroffで解いており、初期条件は単純な矩形パルスだった。2次スキームなので1次風上より鋭いはずだが、結果は段差の前でアンダーシュート、後ろでオーバーシュート。ログを見てもCFLは0.5で安定条件を満たしている。

問題はアルゴリズムが不安定なことではなく、アルゴリズムが単調でないことだった。

振動の正体 — Godunovが引いた壁

1次元線形移流方程式は

[equation]

速度 [math] が一定ならば、解は初期形状がそのまま右へ平行移動する。数値的にはセル境界のフラックス [math] を定義し、

[equation]

この形式は flux-conserving form と呼ばれ、質量・運動量・エネルギーなどの保存量を機械精度まで保つ。Lax–Wendroffはここに2次テイラー補正を加えた線形スキームだ。

ところが1959年にGodunovが証明した定理は厳しい。線形定係数移流に対して、単調性(monotonicity)を保ちつつ2次以上の精度を持つ線形スキームは存在しない。 どちらかを諦めるしかない。Lax–Wendroffは2次精度を取って単調性を捨てた。だから段差で振動が出る。

TVD条件:Hartenの不等式

Harten(1983)が示した抜け道は「全変動が減少する」スキームだ。

[equation]

左辺は数値解のうねりの総和。毎ステップこの値が増えなければ新しい極値(オーバーシュート・アンダーシュート)は生じない。この条件を満たすスキームをTVDと呼ぶ。

Godunovの壁を迂回するにはスキームを非線形にする必要がある。解の滑らかさに応じてアルゴリズムが形を変える、というアイデアだ。滑らかな領域では2次、急な勾配の近くでは1次風上。この切り替えを担うのが flux limiter である。

Flux Limiterを一行で理解する

Lax–Wendroffのフラックスは1次風上に補正項を足した形だ。

[equation]

ここで [math] は移流速度、[math] はセル幅、[math] がリミッター、[math] は前後の勾配比。

[equation]

解が滑らかなら [math]、極値の近くでは [math]L1[math]\varphi(r)$ は滑らかな領域で2次、極値近くで1次に自動切り替えする一行関数だ。
- minmodは安全、superbeeは鋭く、van Leer/MCはバランス。LESと衝撃捕獲では選択基準が異なる。

---
Read more: https://cfdblog.cc/ja/posts/2026-04-24-flux-limiter-tvd-advection]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-24-flux-limiter-tvd-advection</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-24-flux-limiter-tvd-advection</guid>
      <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>알고리즘</category>
      <category>TVD</category>
      <category>flux-limiter</category>
      <category>advection</category>
      <category>수치해석</category>
    </item>
    <item>
      <title><![CDATA[水流はなぜ滴に分裂するのか — プラトー・レイリー不安定性と分裂レジーム]]></title>
      <description><![CDATA[表面張力が水柱を液滴へと切り分ける原理と、噴霧設計のための無次元数マップ

[5 min read · 2,467 words]]]></description>
      <content:encoded><![CDATA[import { PlateauRayleighJet } from '@/components/post-viz/2026-04-23-plateau-rayleigh-jet-breakup/PlateauRayleighJet'

キッチンの水道の蛇口を半分だけ開けてみてください。最初は滑らかな水柱が見えます。しかし、10cmほど落ちた地点から、規則的な液滴へと分裂し始めます。毎日目にする光景ですが、なぜ連続体が自ら途切れるのかという問いに答えるのは簡単ではありません。この記事では、1849年のジョゼフ・プラトー（Joseph Plateau）と1879年のレイリー卿（Lord Rayleigh）による古典的な説明を辿り、エンジン噴射ノズルやインクジェットの設計で今日でも使われている ウェーバー数（慣性力／表面張力比）と オーネゾルゲ数（粘性力／（慣性・表面張力）比）が、どのようにその結果を拡張しているのかを見ていきます。最後まで読めば、「なぜあるジェットは太い滴に分裂し、あるジェットは霧のように砕けるのか」を、一つのレジームマップで説明できるようになります。

なぜ連続体は分裂する道を選ぶのか

表面張力は表面積を減らそうとする力です。同じ体積の液体であれば、球形であるときが最も表面積が小さくなります。そのため、無重力状態の水の塊は球形になります。

それでは、同じ体積の長い水柱と、その水を一定の間隔で切り分けて作った液滴の鎖では、どちらの表面積が小さいでしょうか。直感に反して、液滴の鎖の方が小さくなります。ただし、切り分ける間隔が水柱の円周よりも長い場合に限ります。水柱が自ら分裂するのはこれが理由です。エネルギーの低い状態へと転がり落ちようとする、自然な結果なのです。

プラトーの幾何学的直感

プラトーは、半径 [math] の円柱が軸方向に波長 [math] の微小な変形を受けたときの表面積の変化を計算しました。

[equation]

ここで、[math] は無次元波数 [math]（波数 [math] と半径の積）です。この値が1より小さければ [math] となり、摂動は収束します。

この条件を書き直すと単純です。

$[math]kR[math]kR[math]kR[math]U = 1\,\text{m/s}[math]\lambda > 2\pi R[math]\lambda{\max} \approx 9 R[math]We[math]Oh[math]We$ を調整します。

---
Read more: https://cfdblog.cc/ja/posts/2026-04-23-plateau-rayleigh-jet-breakup]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-23-plateau-rayleigh-jet-breakup</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-23-plateau-rayleigh-jet-breakup</guid>
      <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>流体力学</category>
      <category>流動現象</category>
      <category>プラトー・レイリー</category>
      <category>ウェーバー数</category>
      <category>オーネゾルゲ数</category>
      <category>液柱分裂</category>
    </item>
    <item>
      <title><![CDATA[CFD線形ソルバーの選び方：JacobiからBiCGSTABまでの収束速度比較]]></title>
      <description><![CDATA[Krylov部分空間における4大ソルバーの特性と収束速度をコードとシミュレーションで比較解説

[5 min read · 2,558 words]]]></description>
      <content:encoded><![CDATA[import { KrylovConvergence } from '@/components/post-viz/2026-04-22-cfd-linear-solvers-krylov/KrylovConvergence'

1952年、コーネリアス・ランチョス、マグナス・ヘステネス、エドゥアルト・スティフェルの3人は、ある学会で偶然にも独立して同じ結果を発表しました。対称正定値（SPD）行列をわずか [math] 回の反復で解くアルゴリズムです。これが現在、私たちが共役勾配法（Conjugate Gradient, CG）と呼んでいる手法です。興味深いのは、70年経った今日も、CFDソルバーの核心にはこのアイデアがほぼそのまま生き続けている点です。それは、Krylov（クリロフ）部分空間で解を探すというアイデアです。このポストでは、CFDで最も頻繁に使用される4つのソルバー（Jacobi、Gauss-Seidel、CG、BiCGSTAB）の収束速度を、Pythonとインタラクティブなシミュレーションで比較します。最後まで読めば、実務において「この問題にはどのソルバーが適しているか」を即座に判断できるようになるでしょう。

なぜCFDでは線形システムを反復法で解くのか

ナビエ・ストークス方程式を離散化すると、各ステップで [math] という形式の巨大な線形システムが現れます。ここで、[math] は係数行列、[math] はセル中心の変数ベクトル、[math] は右辺のソース項です。3D格子の100万セルの場合、[math] は [math] サイズの疎行列になります。LU分解（行列を下三角行列と上三角行列の積に分解する直接法）をこの規模で実行すると、メモリとCPUを膨大に消費します。OpenFOAM、SU2、GerrisなどのオープンソースCFDコードが例外なく反復法（iterative method）を採用しているのはそのためです。

反復法の基本アイデアは単純です。初期推定値 [math] から出発し、残差 [math] が許容値以下になるまで [math] を少しずつ修正していきます。問題は、その「少しずつ」をどう定義するかです。この定義こそがソルバーの名前を分ける境界線となります。

Krylov部分空間というアイデア

初期残差 [math] に行列 [math] を繰り返し掛けたベクトルが生成する空間があります。

[equation]

[math] が Krylov部分空間、[math] は次元、[math] は線形結合で張られる空間です。Krylov系のソルバーは、解を [math] の中で探しつつ、残りの残差 [math] がある最適性条件を満たすように決定します。

解を部分空間に限定することには2つの利点があります。第一に、行列とベクトルの積以外の演算が必要ないため、疎行列構造をそのまま活用できます。第二に、理論的にその部分空間内で最適な解を抽出できます。CGはAノルム誤差を、GMRESは2ノルム残差を、Krylov空間内で正確に最小化します。

4つのソルバーの特性比較

| ソルバー | 要求される行列 | メモリ | 長所 | 短所 |
|------|-----------|--------|------|------|
| Jacobi | 対角優位を推奨 | 極めて低い | 並列化が容易、実装が10行程度 | 遅い（スペクトル半径 [math]） |
| Gauss-Seidel | 任意 | 極めて低…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-22-cfd-linear-solvers-krylov]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-22-cfd-linear-solvers-krylov</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-22-cfd-linear-solvers-krylov</guid>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>アルゴリズム</category>
      <category>線形ソルバー</category>
      <category>Krylov</category>
      <category>数値解析</category>
    </item>
    <item>
      <title><![CDATA[壁距離を O(N log N) で解く方法：Eikonal 方程式と Fast Marching]]></title>
      <description><![CDATA[RANS 乱流モデルの必須入力である壁距離を効率的に計算するアルゴリズム

[6 min read · 3,195 words]]]></description>
      <content:encoded><![CDATA[import { EikonalFrontPropagation } from '@/components/post-viz/2026-04-22-wall-distance-eikonal-fast-marching/EikonalFrontPropagation'

1996年、カリフォルニア大学バークレー校の James Sethian 氏は、医療画像における血管境界のトラッキングアルゴリズムを改良していました。その成果である Fast Marching Method は、現在、意外な場所で使われています。航空機の翼周囲の RANS（Reynolds-Averaged Navier-Stokes）ソルバーが実行されるたびに、まさにこのアルゴリズムが各格子点の壁距離（wall distance）を生成しています。Spalart-Allmaras モデルや k-ω SST モデルは、各格子において「最も近い壁はどこか」という値を入力として必要とします。この記事では、その値を愚直に求めた場合のコスト、問題を Eikonal 方程式（|∇d|=1/F 形式の双曲型 PDE）に変換するアイデア、そして Dijkstra 法の連続版である Fast Marching を用いて [math] で解を得る方法をまとめます。

なぜ乱流モデルに壁距離が必要なのか

境界層乱流の統計量は、壁からの距離 [math] に強く依存します。RANS モデルはその依存性を代数式として組み込みます。Spalart-Allmaras では、破壊（destruction）項で [math]（壁距離）を直接使用します。k-ω SST では、ブレンディング関数 [math] の中に [math] が入ります。LES との混合モデル（DES, DDES, IDDES）でも、壁距離がスイッチの役割を果たします。

問題は、[math] がメッシュの幾何量であるということです。メッシュが移動したり変形したりする場合、各タイムステップごとに再計算する必要があります。回転機械（コンプレッサー、ポンプ）のように、ローターとステーターの境界が相対運動をする場合がこれに該当します。

愚直な方法の落とし穴

すぐに思いつく方法は、「すべての壁面とすべてのセルの距離を計算して最小値を選ぶ」というものです。実際、教科書の例題ではこれが使われています。

このコストは [math] です。航空機全体を解くとしましょう。1,000万セル、50万壁面であれば、5兆回の距離計算になります。これがタイムステップごとに実行されると、解析は終わりません。KD-tree のような空間データ構造を用いることで [math] まで下げることができますが、複雑な形状の壁近傍クエリは依然として大きな負担です。

Eikonal 方程式へと視点を変える

壁距離を PDE（偏微分方程式）の解として捉えてみましょう。「壁で 0 であり、すべての方向で勾配の大きさが 1」である関数こそが距離場です。

[equation]

ここで、[math] は壁までの「到達時間」、[math] は伝播速度（デフォルトは 1）、[math] は壁の集合です。[math] と固定すれば、[math] はそのままユークリッド距離となります。

この方程式は双曲型（hyperbolic）です。情報は特性線（壁から外側へ伸びる直線）に沿って一方向にのみ流れます。この一方向性が効率的なアルゴリズムの鍵となります。「すでに値が定まった点からのみ値が伝…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-22-wall-distance-eikonal-fast-marching]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-22-wall-distance-eikonal-fast-marching</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-22-wall-distance-eikonal-fast-marching</guid>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>アルゴリズム</category>
      <category>Eikonal</category>
      <category>Fast-Marching</category>
      <category>メッシュ</category>
    </item>
    <item>
      <title><![CDATA[虫は蜂蜜の中を泳ぐ — レイノルズ数が変える流動の世界]]></title>
      <description><![CDATA[無次元化によって明らかになるレイノルズ数と、スケールが生み出す流動の違い

[5 min read · 2,510 words]]]></description>
      <content:encoded><![CDATA[バクテリアは泳ぐことができません。正確に言えば、私たちが「泳ぐ」と呼んでいる慣性ベースの推進力は、バクテリアには通用しません。尾を振って慣性で前に進む私たちとは異なり、バクテリアは慣性が消失した世界 — まるで透明な蜂蜜の中にいるような場所 — で生きているからです。このポストでは、なぜ同じナビエ・ストークス方程式がスケールによって全く異なる世界を作り出すのか、そしてその違いを一つの数字で要約するレイノルズ数（慣性力/粘性力比）がどのように流体力学の「隠れた文法」になるのかを探ります。最後に、方程式から単位を剥ぎ取って構造だけを残す作業である「無次元化」が、なぜ流体力学の最初の文法なのかについても触れます。

同じ方程式、異なる世界

シロナガスクジラは海で泳ぎます。水分子はもちろん同じ水です。しかし、1 μmのバクテリアにとって、水は全く別の物質のように感じられます。同じナビエ・ストークス方程式を使っても、スケールが変われば支配的な項が変わるからです。

非圧縮ナビエ・ストークス方程式は以下のようになります。

[equation]

[math]は密度、[math]は速度場、[math]は圧力、[math]は粘性係数です。左辺は慣性（質量 × 加速度）、右辺の [math] は粘性（内部摩擦）の項です。これら二つの力が常に戦っています。どちらが勝つのでしょうか。

方程式の服を脱がせる：無次元化

答えはスケールが決めます。これを示すには、方程式を無次元化する必要があります。代表長さ [math]、代表速度 [math]、代表時間 [math]、代表圧力 [math] ですべての量を割ります。

[equation]

各変数の意味は「その物理量を自分自身の自然な大きさで測定したもの」です。この定義をナビエ・ストークス方程式に代入して整理すると、単位がすべて消えた綺麗な式が残ります。

[equation]

すべての物理単位が消え、たった一つの数字 [math] だけが残ります。これがレイノルズ数です。

[equation]

[math] は動粘性係数(kinematic viscosity)です。[math] が大きいほど慣性が、[math] が大きいほど粘性が勝ちます。同じ水でも [math] が小さくなれば [math] は線形に低下します。結局、世界を支配する項が変わるのです。

スケールがレイノルズ数を変える

数字で感じてみましょう。水の動粘性係数 [math] を基準に、代表的な生物の [math] は以下の通りです。

[code block]

最大値と最小値の差は、なんと13桁に及びます。同じ水の中での話です。レイノルズ数は単なる数字ではなく、同じ流体の中でも異なる「世界」をラベリングする住所のようなものです。

バクテリアのように [math] の領域では、無次元方程式の慣性項が事実上消滅し、両辺に [math] を掛けるとストークス方程式 [math] になります。時間微分がありません。つまり、バクテリアの流動は「過去を記憶できない」のです。力を抜いた瞬間に速度も0になります。

視覚化で直感を作る

以下のシミュレーションで、直接レイノルズ数を操作してみましょう。

レイノルズ数を10付近まで下げると、ベクトル場が櫛のように整えられます。粘性があらゆる乱れを素早く消散させるためです。逆に1000まで上げると、ベクトルが不規則に揺れ始めます。これが乱流の前兆です。

次は円柱背後の流れです。観察ポイントは、カルマ…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-21-reynolds-number-scale-fluid-mechanics]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-21-reynolds-number-scale-fluid-mechanics</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-21-reynolds-number-scale-fluid-mechanics</guid>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>流体力学</category>
      <category>流動現象</category>
      <category>レイノルズ数</category>
      <category>無次元化</category>
    </item>
    <item>
      <title><![CDATA[不連続ガレルキン法(DGM)：非構造格子における圧縮性流体解析の高精度離散化]]></title>
      <description><![CDATA[DGMの弱形式の導出からガウス求積、非構造格子への実装までを段階的に解説

[3 min read · 1,685 words]]]></description>
      <content:encoded><![CDATA[import { DGElementBasis } from '@/components/post-viz/2026-04-20-discontinuous-galerkin-method-cfd/DGElementBasis'

不連続ガレルキン法(Discontinuous Galerkin Method, DGM)は、有限要素法(FEM)と有限体積法(FVM)の長所を組み合わせた数値解析手法です。セル内部では高次の多項式基底関数を使用し、セル境界では数値フラックスを用いて情報を交換します。非構造格子において圧縮性流体を高精度に解析する際の強力な選択肢となります。

支配方程式とフラックスの分離

圧縮性流体の保存方程式：

[equation]

ここで、
- [math]: 保存変数のベクトル
- [math]: 対流(convective)フラックス
- [math]: 粘性(viscous)フラックス
- [math]: ソース項

基底関数の展開と弱形式の導出

セル [math] 内部で、解を基底関数の線形結合で近似します：

[equation]

[math] はセル内の自由度数であり、近似多項式の次数 [math] によって決定されます (3Dの場合 [math])。

テスト関数 [math] を掛けて [math] で積分すると：

[equation]

グリーンの公式（部分積分）を適用すると、体積積分と境界積分に分かれます：

[equation]

境界における [math] は、隣接セルの情報を用いた数値フラックスです（Roe、HLLCなど）。

質量行列と時間積分

[math] 番目の基底関数係数に関する常微分方程式(ODE)として整理すると：

[equation]

ここで、質量行列(mass matrix)は：

[equation]

直交基底関数（テイラー基底やルジャンドル多項式など）を使用すると、[math] が対角行列になり、逆行列の計算コストがなくなります。残差ベクトル [math] は、体積積分項と面フラックス項の和となります：

[equation]

ガウス求積法の適用

体積・面積分はガウス＝ルジャンドル求積法で数値計算します。次数 [math] の多項式を正確に積分するには、少なくとも [math] 次以上の積分が必要です。

セルタイプ別のガウスポイント数（代表的な次数別）：

| セルタイプ   | 1次 | 2次 | 3次 |
|------------|-----|-----|-----|
| 四面体(Tetrahedron) | 1  | 4   | 10  |
| 六面体(Hexahedron)  | 1  | 8   | 27  |
| プリズム(Prism)       | 3  | 9   | 18  |
| ピラミッド(Pyramid)     | 1  | 5   | 15  |

面(face)タイプについては、セルポイントの3倍（3D投影）を使用します。

アルゴリズムの実装手順

実際の実装では、以下の順序で進めます：

1. セル・面の分類: テトラ/ヘキサ/プリズム/ピラミッド/多面体
2. 基底関数の準備: 各セルタイプ × 近似次数に合った [math] を計算
3. ガウスポイントのキャッシュ: 参照要素(reference element)の座標と重みをメモリに保存
4. 変数の初期化: [math] の設定（一様流条件など）
5. ループ（時…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-20-discontinuous-galerkin-method-cfd]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-20-discontinuous-galerkin-method-cfd</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-20-discontinuous-galerkin-method-cfd</guid>
      <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>FEM</category>
      <category>DGM</category>
      <category>高次精度</category>
      <category>圧縮性流体</category>
    </item>
    <item>
      <title><![CDATA[剛体力学のためのFEM：クォータニオンによる回転処理と慣性テンソル]]></title>
      <description><![CDATA[FEM剛体シミュレーションにおけるクォータニオンによる回転表現と慣性テンソルの扱い方

[3 min read · 1,350 words]]]></description>
      <content:encoded><![CDATA[import { QuaternionRotationDemo } from '@/components/post-viz/2026-04-20-fem-rigid-body-dynamics-quaternion/QuaternionRotationDemo'

剛体力学の基本方程式

流体-構造連成(FSI)解析や離散要素法(DEM)シミュレーションにおいて、剛体の運動を正確に記述することは不可欠です。剛体は変形のない物体であり、任意の2点間の距離が常に一定に保たれます。

剛体内の任意の粒子 [math] の速度は、次のように分解されます。

[equation]

ここで、[math] は重心の速度、[math] は角速度、[math] は重心から粒子 [math] までの変位ベクトルです。

線形運動量と角運動量

ニュートンの第2法則より、全体の線形運動量は次のようになります。

[equation]

ここで、[math] は全質量です。重心の加速度は、

[equation]

全体の角運動量は、

[equation]

ここで、[math] は慣性テンソル(inertia tensor)、[math] は全トルク(torque)です。

慣性テンソル

慣性テンソルは重心を基準として、

[equation]

連続体へと拡張すると、

[equation]

ここで、[math] は単位テンソル、[math] は外積(outer product)です。

物体が回転すると、慣性テンソルは方位行列(orientation matrix) [math] によって変換されます。

[equation]

ここで、[math] は物体座標系(body frame)における初期慣性テンソルであり、シミュレーション開始時に一度だけ計算すれば十分です。

クォータニオンを用いた回転表現

オイラー角(Euler angles)で回転を表現すると、ジンバルロック(gimbal lock)の問題が発生します。これを避けるために、クォータニオン(quaternion)を使用します。

クォータニオン [math] は、スカラー部分とベクトル部分で構成されます。

[equation]

単位軸 [math] に対して角度 [math] だけ回転させる場合、

[equation]

2つのクォータニオン [math] と [math] の合成回転は、積として表現されます。

[equation]

これを利用すると、方位行列 [math] はクォータニオン成分によって明示的に表現されます。

[equation]

クォータニオンの時間微分は、角速度 [math] と結びついています。

[equation]

FEM離散化と四面体形状関数

FEMで剛体の変位場を離散化する場合、四面体要素の形状関数(shape function)は次のようになります。

[equation]

ここで、[math] は無次元体積座標(barycentric coordinates)であり、[math] の条件を満たします。

線形四面体要素における変位補間は、

[equation]

剛体拘束条件を適用すると、自由度は6個（並進3 + 回転3）に減少します。

Python実装例

[code block]

実務上の注意点

1. クォータニオンの正規化忘れ
数値積分が繰り返されると、 [math] となり、回転行列が非直交(non-orthogonal…

---
Read more: https://cfdblog.cc/ja/posts/2026-04-20-fem-rigid-body-dynamics-quaternion]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-04-20-fem-rigid-body-dynamics-quaternion</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-04-20-fem-rigid-body-dynamics-quaternion</guid>
      <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>FEM</category>
      <category>剛体力学</category>
      <category>クォータニオン</category>
    </item>
    <item>
      <title><![CDATA[Dean流：螺旋管における二次流れの解析解とCFD検証]]></title>
      <description><![CDATA[曲がり管内の遠心力が生み出す一対のDean渦 — 解析解の導出から数値的検証まで

[4 min read · 1,977 words]]]></description>
      <content:encoded><![CDATA[import { DeanSecondaryFlow } from '@/components/post-viz/2026-03-28-dean-flow-analytical-solution/DeanSecondaryFlow'

螺旋型蒸気発生器（Helical Steam Generator）の設計において、必ずと言っていいほど投げかけられる質問があります。
「直管に比べて熱伝達はどのくらい向上するのか？」
その答えの鍵となるのが、Dean渦（Dean vortices）です。これは、曲がり管内の遠心力によって生じる一対の螺旋状の二次流れのことです。

1928年にW. R. Deanによって初めて記述されたこの流れは、原子力工学、化学工学、生物力学など、幅広い分野で繰り返し登場する古典的な問題です。今回は、Deanの摂動展開を直接導出し、Pythonで可視化した後、有限差分法を用いて検証を行います。

---

1. 問題の設定

曲率半径 [math] の円弧状の管（管半径 [math]）を考えます。管の断面に円柱座標系 [math] をとり、管軸方向の弧長座標を [math] と定義します。

[equation]

非圧縮性ナビエ・ストークス方程式を曲線座標系で表現すると、管軸方向の運動量方程式に遠心力項が追加されます。

[equation]

遠心力がない場合（[math]）、この式は直ちにポアズイユ流（Poiseuille flow）へと還元されます。

---

2. 解析解の導出

2-1. 無次元化

代表速度 [math]（ポアズイユ流の中心速度）を用いて無次元化します。

[equation]

0次解（ポアズイユ流）は以下の通りです。

[equation]

2-2. Dean数の定義

Deanは以下の無次元数を導入しました。

[equation]

現代では、管径 [math] を基準として以下のように書かれることも多いです。

[equation]

2-3. 摂동展開 (Dean 1928)

[math] の条件下で、流線関数 [math] を [math] で展開します。

[equation]

1次の二次流れの流線関数は以下のようになります。

[equation]

二次流れの速度成分（[math] から誘導）は以下の通りです。

[equation]

軸方向速度の1次補正項は以下のようになります。

[equation]

最終的な軸方向速度（2次近似）は以下の通りです。

[equation]

---

3. 物理的解釈

- 二次流れ: [math] 依存性 → 流体が外側（outer wall, [math]）に押しやられ、両サイドから戻ってくる一対の渦が形成されます。
- 軸方向速度の歪み: 遠心力により、高流速のコアが外側に偏ります。これにより速度プロファイルが非対称になります。
- せん断応力の増加: 二次流れが境界層を乱すことで、熱伝達率が向上します（ヌセルト数 [math] の上昇）。

熱伝達向上の相関式（Dittus-Boelter式との比較）:

[equation]De = Red\sqrt{\frac{d}{2R}} = Red\sqrt{\frac{0.012}{2 \times 2.3}} \approx 0.051 \cdot Red$[math]Red \approx 10,000[math]De \approx 510$ となります。
この領域ではD…

---
Read more: https://cfdblog.cc/ja/posts/2026-03-28-dean-flow-analytical-solution]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-03-28-dean-flow-analytical-solution</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-03-28-dean-flow-analytical-solution</guid>
      <pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>解析解</category>
      <category>古典流体力学</category>
      <category>CFD検証</category>
      <category>Dean流</category>
      <category>二次流れ</category>
      <category>螺旋管</category>
    </item>
    <item>
      <title><![CDATA[ポアズイユ流れ：解析解の導出と有限差分法による検証]]></title>
      <description><![CDATA[最も単純な粘性流れの完全な解析解を手計算で導出し、FDコードで数値的な正確さを検証するCFD入門ベンチマーク

[3 min read · 1,643 words]]]></description>
      <content:encoded><![CDATA[import { PoiseuilleProfile } from '@/components/post-viz/2026-03-28-poiseuille-flow-analytical-solution/PoiseuilleProfile'

ポアズイユ流れ（Poiseuille flow）は、2枚の平行平板間や円形管の内部で、一定の圧力勾配によって駆動される完全発達した層流のことです。
厳密な解析解が存在するため、CFDコード検証の最初のテストケースとして、世界中のあらゆる教科書に登場します。

今日は、チャンネル流れ（2D平板間）を対象に解析解を段階的に導出し、簡単な有限差分（FD）コードを作成して収束次数を確認します。

問題の設定

形状および境界条件

2枚の無限平行平板間の完全発達した層流を考えます。

- チャンネル半幅：[math]（平板は [math] に位置）
- 流れ方向：[math]（無限に長いと仮定）
- 境界条件：両壁面で no-slip [math] [math]
- 駆動源：一定の圧力勾配 [math] は定数）

支配方程式

完全発達した流れなので [math] です。[math] 方向のナビエ・ストークス方程式は以下のようになります。

[equation]

完全発達の条件（[math]）を適用すると：

[equation]

解析解の導出

ステップ1：常微分方程式（ODE）への単純化

[equation]

ステップ2：1回目の積分

[equation]

ステップ3：2回目の積分

[equation]

ステップ4：境界条件の適用

[math]：

[equation]

[math]：

[equation]

(1) [math] (2) より：[math]（対称性）

(1) [math] (2) より：[math]

最終的な解析解

[equation]

チャンネル中心（[math]）での最大速度：

[equation]

物理的解釈

速度プロファイル

解析解は放物線（parabola）分布となります。壁面の摩擦が流れの断面全体に均一に伝わり、中心で最大、壁面で0になります。

無次元速度 [math] は、チャンネルの半幅 [math] や粘度 [math] に関わらず一定となる普遍的なプロファイルです。

壁面せん断応力

[equation]

（大きさ：[math]） 圧力勾配が大きいほど、またチャンネルが広いほど、壁面摩擦は大きくなります。

体積流量

[equation]

これは ハーゲン・ポアズイユの法則 の2D版と呼ばれます。流量は [math] に比例するため、チャンネル幅が2倍になると流量は8倍に増加します。

Pythonによる解析解の可視化

[code block]

有限差분法による数値検証

[math] を2次中心差分で離散化します。一様格子 [math]：

[equation]

境界条件：[math]

これを三対角行列（tridiagonal matrix）の連立方程式として書くと：

[equation]

Pythonでの実装

[code block]

収束結果

| [math] | [math] | [math] 誤差 | 収束次数 |
|----:|-----------|------------|----------|
| 4 | 0.4000 | 2.78e-16 | — |
| 8 | 0.2222 | 1…

---
Read more: https://cfdblog.cc/ja/posts/2026-03-28-poiseuille-flow-analytical-solution]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-03-28-poiseuille-flow-analytical-solution</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-03-28-poiseuille-flow-analytical-solution</guid>
      <pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>解析解</category>
      <category>古典流体力学</category>
      <category>CFD検証</category>
      <category>ポアズイユ流れ</category>
      <category>有限差分法</category>
    </item>
    <item>
      <title><![CDATA[[CFD Q&A] simpleFoamで圧力残差が収束しない時の対処法]]></title>
      <description><![CDATA[実務で直面したSIMPLEアルゴリズムの発散解決記 — リラクゼーション・ファクタ（緩和係数）の設定が鍵でした

[3 min read · 1,561 words]]]></description>
      <content:encoded><![CDATA[import { SimpleResidualHistory } from '@/components/post-viz/2026-03-27-simpleFoam-pressure-divergence/SimpleResidualHistory'

先週、かなり時間を費やしてしまった問題がありました。simpleFoamを実行していたところ、圧力残差（pressure residual）が 1e-3 以下に下がらず、むしろ上昇し始めてしまったのです。最初はメッシュの問題かと思いましたが、結論から言うと、原因はリラクゼーション・ファクタ（relaxation factor）にありました。

問題の状況

- ソフトウェア: OpenFOAM v2312
- 形状: 2D長方形チャネル、inlet–outlet境界
- 乱流モデル: k-ε (standard)
- ソルバー: simpleFoam (定常)

最初の20〜30イテレーション（iteration）は順調に下がっていましたが、突然圧力残差が跳ね上がり始めました。

[code block]

速度（velocity）はうまく収束しているのに、圧力だけが不安定なままです。これは典型的な圧力-速度カップリングの不安定パターンです。

原因分析のプロセス

ステップ1：メッシュ品質の確認

まずは checkMesh を実行しました。

[code block]

最大非直交性（non-orthogonality）は32度、最大スキューネス（max skewness）は0.8で、それほど悪くありません。メッシュの問題ではなさそうです。

ステップ2：境界条件の点検

inlet（流入境界）の圧力を zeroGradient、outlet（流出境界）を fixedValue 0 に設定しました。これは標準的な設定なので問題ありません。

しかし、初期の p フィールドを確認したところ、inlet側に異常に大きな値が入っていました。以前 funkySetFields で実験した際の残骸が残っていたことが原因でした。

ステップ3：fvSolution の確認

[code block]

U=0.9 はかなり強気な設定です。SIMPLE法において、速度の緩和を強めると収束速度は上がりますが、圧力の更新が追いつかないと発散してしまいます。

以下の2つの原因が重なっていました。
1. リラクゼーション・ファクタが過度に高い
2. 初期の p フィールドに誤った値が残っている

解決策

リラクゼーション・ファクタを下げる

[code block]

初めて実行するケースでは、控えめな値から始めるのが鉄則です。収束が確認できたら、徐々に上げていきます。

初期 p フィールドの初期化

[code block]

または、直接 0/p ファイルを開いて internalField uniform 0; に設定します。

[code block]

検証

修正後に再実行すると、以下のようになりました。

[code block]

200イテレーションほどで、圧力残差が 1e-4 レベルまで安定して下がりました。

一般的な教訓

simpleFoam 収束チェックリスト — 以下の順序で確認すれば、ほとんどの問題は解決します。

1. まずは初期条件: 0/ ディレクトリの p, U フィールドが意図した値になっているか確認します。以前の実験の残骸があれば必ず初期化してください。

2. リ…

---
Read more: https://cfdblog.cc/ja/posts/2026-03-27-simpleFoam-pressure-divergence]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-03-27-simpleFoam-pressure-divergence</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-03-27-simpleFoam-pressure-divergence</guid>
      <pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>CFD実務</category>
      <category>QA</category>
      <category>OpenFOAM</category>
      <category>SIMPLE</category>
      <category>収束</category>
    </item>
    <item>
      <title><![CDATA[【OpenFOAMチュートリアル】後方ステップ流の解析 — simpleFoamで再循環領域を捉える]]></title>
      <description><![CDATA[OpenFOAMのsimpleFoamを使用して、後方ステップ（Backward Facing Step）における非圧縮性流れを段階的に解析するガイド

[2 min read · 1,166 words]]]></description>
      <content:encoded><![CDATA[import { BFSRecirculation } from '@/components/post-viz/2026-03-26-openfoam-backward-facing-step/BFSRecirculation'

このチュートリアルでは、後方ステップ（Backward Facing Step）形状における再循環流れをsimpleFoamでシミュレーションします。ステップ下流に形成される再循環領域（recirculation zone）と再付着点（reattachment point）を直接確認することが目標です。

---

前提条件

- OpenFOAMバージョン: v2312以上（OpenFOAM.comまたはOpenFOAM.orgのどちらでも可）
- 事前知識: 基本的なターミナル操作、OpenFOAMのケース構造（0/constant/system）の理解
- 必要ソフトウェア: ParaView 5.x以上（結果の可視化用）

---

ステップ 1: ケースディレクトリの作成

[code block]

ケース構造は以下の通りです。

[code block]

[code block]

---

ステップ 2: メッシュ生成 — blockMeshDict

system/blockMeshDictでは、ステップ形状を直方体ブロックの組み合わせで定義します。以下は簡略化された2Dケースの例です（ステップ高さ H = 0.1 m）。

[code block]

[code block]

予想される出力:
[code block]

---

ステップ 3: 境界条件の設定

0/U — 速度境界条件

[code block]

0/p — 圧力境界条件

[code block]

0/k — 乱力エネルギー

[code block]

---

ステップ 4: 物性値および乱流モデルの設定

constant/transportProperties

[code block]

constant/turbulenceProperties

[code block]

---

ステップ 5: 数値計算手法の設定

system/fvSchemes

[code block]

system/fvSolution

[code block]

---

ステップ 6: 解析の実行

[code block]

予想される出力（収束過程）:
[code block]

収束判定は、すべての変数の残差（residual）が1e-4以下になった時です。

---

ステップ 7: 結果の可視化 (ParaView)

[code block]

ParaViewで以下の手順に従って結果を確認します。

1. Coloringドロップダウン → Uを選択 → Magnitudeで速度の大きさを表示。
2. Glyphフィルタを追加 → ベクトル方向の可視化（再循環領域の確認）。
3. Stream Tracerフィルタ → 流線を表示。

foamToVTKでファイル変換後の後処理:

[code block]

Pythonを使用した再付着長さの自動抽出:

[code block]

---

よくあるエラーと解決策

エラー 1: FOAM FATAL ERROR: Cannot find file "0/epsilon"

[code block]

原因: 0/epsilonファイルが不足しています…

---
Read more: https://cfdblog.cc/ja/posts/2026-03-26-openfoam-backward-facing-step]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-03-26-openfoam-backward-facing-step</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-03-26-openfoam-backward-facing-step</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>OpenFOAM</category>
      <category>チュートリアル</category>
      <category>simpleFoam</category>
      <category>후방계단</category>
      <category>난류</category>
    </item>
    <item>
      <title><![CDATA[可視化で理解するReynolds数と流れの遷移]]></title>
      <description><![CDATA[インタラクティブな可視化で理解するReynolds数と層流-乱流遷移現象

[2 min read · 1,244 words]]]></description>
      <content:encoded><![CDATA[Reynolds数とは何か

流体流れを理解する上で最も重要な無次元数の一つがReynolds数(Re)です。これは慣性力と粘性力の比を表します。

[equation]

ここで:
- [math]: 流体の密度 [math]
- [math]: 特性速度 [math]
- [math]: 特性長さ [math]
- [math]: 動粘性係数 [math]
- [math]: 動粘度 [math]

流れ域の区分

| Reynolds数の範囲 | 流れ域 | 特徴 |
|------------------|-----------|------|
| [math] | クリープ流(Stokes flow) | 粘性支配、完全に層流 |
| [math] | 乱流 (Turbulent) | 不規則な混合、高いエネルギー散逸 |

流れ遷移の物理的メカニズム

層流から乱流への遷移はケルビン-ヘルムホルツ(Kelvin-Helmholtz)不安定から始まります。速度勾配が存在する境界で小さな擾乱が増幅され、渦(vortex)が形成され、それが連鎖的にエネルギーカスケードを引き起こします。

速度プロファイルの変化を数式で表すと:

[equation]

Navier-Stokes方程式の左辺の非線形項 [math] が慣性を担い、右辺の [math] が粘性減衰を担います。Reynolds数はこの2項の相対的な大きさを示します。

速度場の可視化:Reynolds数による流れの変化

下のシミュレーションでReynolds数の変化に伴う速度場の変化を直接確認してください:

観察ポイント:
- 低Re (Re ≈ 150): ベクトルが滑らかで規則的に整列 — 粘性が擾乱を即座に減衰
- 中Re (Re ≈ 100500): 障害物後流で非対称性が出現 — 慣性力が粘性力に匹敵
- 高Re (Re > 1000): ベクトル方向が不規則化し、渦構造が発達

円柱周りの流線:カルマン渦列

円柱(cylinder)を通過する流れでReynolds数が増加すると、周期的な渦放出現象であるカルマン渦列(Kármán vortex street)が現れます。

放出周波数はStrouhal数 [math] で正規化されます:

[equation]

ここで [math] は渦放出周波数、[math] は円柱直径、[math] は自由流速です。円柱の場合 [math] ([math]Re[math]Re[math]Re^{9/4}$ でスケールするため、高Re流れには乱流モデルが必須

来週は有限体積法(FVM)を使ってこのNavier-Stokes方程式をどう離散化するか、そして上流差分vs中央差分スキームが精度に与える影響を扱います。

---
Read more: https://cfdblog.cc/ja/posts/2026-03-25-reynolds-flow-transition-visualization]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-03-25-reynolds-flow-transition-visualization</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-03-25-reynolds-flow-transition-visualization</guid>
      <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>시각화</category>
      <category>Reynolds</category>
      <category>유동천이</category>
      <category>유체역학</category>
    </item>
    <item>
      <title><![CDATA[【論文レビュー】Physics-Informed Neural Networks for Turbulence Modeling]]></title>
      <description><![CDATA[物理法則を損失関数に直接組み込んだニューラルネットワークにより、希薄なデータから流動場を再構成する新しいアプローチ

[3 min read · 1,615 words]]]></description>
      <content:encoded><![CDATA[import { PINNLossLandscape } from '@/components/post-viz/2026-03-24-paper-review-pinn-turbulence-modeling/PINNLossLandscape'

論文情報

- 著者: Raissi, M., Perdikaris, P., Karniadakis, G. E.
- 学術誌: Journal of Computational Physics, Vol. 378, pp. 686–707, 2019
- DOI: 10.1016/j.jcp.2018.10.045
- arXiv: 1711.10561

---

一行要約

Navier-Stokes方程式をニューラルネットワークの損失関数に直接組み込む（Physics-Informed）ことで、わずかな圧力センサーだけで全速度場を逆算する方法を提案しています。

---

研究背景

従来のCFDは、2つの極端な手法の間に位置しています。

伝統的な手法 (k-ε, k-ω SST): 経験的なクロージャ係数に依存しています。Reynolds数や形状が変わると係数を再チューニングする必要があり、汎化能力が制限されます。

純粋なデータ駆動型ディープラーニング: 大量のラベル付きデータが必要であり、学習されたモデルが質量保存や運動量保存を保証しません。物理的に矛盾した予測を出しても、損失関数はそれを検知できません。

PINNsは、このギャップを埋める試みです。データが希薄であっても、物理法則が正則化（regularizer）の役割を果たします。

---

核心的な手法

PINNの総損失関数は、2つの項の和で表されます。

[equation]

データ損失 [math] は、観測値（例：圧力センサー）とニューラルネットワークによる予測値の差です。

物理損失 [math] は、非圧縮性Navier-Stokes方程式の残差（residual）です。

[equation]

第2項は連続の式（質量保存）です。ニューラルネットワークがこの残差を0にするように訓練されるため、予測値は常にN-S方程式を近似的に満足します。

微分は、PyTorchやTensorFlowの自動微分（automatic differentiation）で計算します。別途の数値離散化は必要ありません。

---

主要な結果

| ケース | 条件 | 結果 |
|--------|------|------|
| 2D円柱周りの流れ | Re=100, 圧力センサーのみ使用 | 速度場の再構成誤差  一行評: 「CFDとディープラーニングの接点を定義した論文。今すぐOpenFOAMを代替することはありませんが、逆問題や希薄データの再構成においてはすでに実用的です。」

λPDE / λBC / λdata を動かすと PINN 損失バランスの脆さがすぐ分かる。

---
Read more: https://cfdblog.cc/ja/posts/2026-03-24-paper-review-pinn-turbulence-modeling]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/2026-03-24-paper-review-pinn-turbulence-modeling</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/2026-03-24-paper-review-pinn-turbulence-modeling</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>논문리뷰</category>
      <category>PINN</category>
      <category>딥러닝</category>
      <category>난류모델</category>
    </item>
    <item>
      <title><![CDATA[Mach Architect: ノズルを設計しながら学ぶ圧縮性流]]></title>
      <description><![CDATA[収縮-拡張ノズルの形状と背圧を直接調整しながら、等エントロピ流、チョーク、垂直衝撃波を体験するインタラクティブシミュレータです。

[2 min read · 1,015 words]]]></description>
      <content:encoded><![CDATA[Mach Architect

教科書で収縮-拡張(C-D)ノズル流を学ぶとき、断面積比 [math] と背圧比 [math] による流れレジームの変化をグラフだけで見ても、直感がなかなかつかめません。

自分でノズルを設計し、背圧を回してみてください。 4つのレベルをクリアすれば、1D圧縮性ノズル流の核心を体得できます。

---

---

操作方法

- ノズル形状: SVG上の青い円(control point)を上下にドラッグして断面積を調整します
- 背圧: 右側スライダーで [math] を調整します
- レベル選択: 上部のLV1LV4ボタンで切り替えます

---

レベル解説

Level 1: Subsonic Acceleration

最も基本的な問題です。収縮ノズルでは亜音速流は断面積が減るほど加速します。
等エントロピ関係式:

[equation]

[math] なので [math] が減ると [math] が増えます。目標は出口マッハ数 0.450.55 です。

Level 2: Choking

流れがチョーク(choke)するとスロートで [math] になります。この状態では背圧をさらに下げてもスロート上流の質量流量は変わりません。

臨界圧力比 ([math]):

[equation]

背圧をこの値以下に下げるか、スロートを十分に狭くしてください。

Level 3: Supersonic Nozzle Design

C-Dノズルでスロート以降に断面積が再び広がると超音速に加速されます。[math] を達成するには:

[equation]

そして背圧を設計圧力(Pbdesign)まで下げて初めて、衝撃波なしの完全超音速流になります。

Level 4: Shock Positioning

背圧が設計圧力より高いが臨界圧力より低い場合、ノズル内部に垂直衝撃波(normal shock)が発生します。

衝撃波前後の関係:

[equation]

[equation]

背圧を調整すると衝撃波の位置が移動します。背圧が高いほど衝撃波はスロート寄り、低いほど出口寄りに動きます。目標は [math] の区間に配置することです。

---

シミュレータの物理モデル

このシミュレータは次の仮定に基づきます:

1. 1D 準1次元(quasi-1D)流: 断面積変化のみ考慮、粘性/熱伝達は無視
2. 等エントロピ流(衝撃波を除く): [math], [math] 保存
3. カロリック完全気体: [math] (空気)
4. 垂直衝撃波: Rankine-Hugoniot関係式適用
5. ノズル形状: Hermite補間で滑らかな断面積分布を生成

衝撃波位置は出口圧力条件を満たす位置を離散的に探索します。衝撃波前方は等エントロピ超音速、後方は全圧損失を反映した等エントロピ亜音速で計算します。

---

さらに学ぶ

- 圧縮性多相流CFD入門 - このシミュレータの物理が多相流に拡張されると何が難しくなるか
- Riemann問題からGodunov型スキームまで - 垂直衝撃波を数値的に捕捉するRiemann solver
- FDM vs FEM vs FVM - この1D問題を実際に離散化する3つのアプローチ

---
Read more: https://cfdblog.cc/ja/posts/mach-architect]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/mach-architect</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/mach-architect</guid>
      <pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>CFD</category>
      <category>Compressible-Flow</category>
      <category>Interactive</category>
      <category>Isentropic</category>
      <category>Nozzle</category>
    </item>
    <item>
      <title><![CDATA[圧縮性多相流のための Rhie-Chow 補間法まとめ]]></title>
      <description><![CDATA[Collocated 格子のチェッカーボード問題から balanced-force 多相流まで、Rhie-Chow 補間の数学的本質と OpenFOAM での実装を体系的にまとめます。

[10 min read · 5,166 words]]]></description>
      <content:encoded><![CDATA[import { CheckerboardPressure } from '@/components/post-viz/rhie-chow-multiphase/CheckerboardPressure'

Rhie-Chow 補間：なぜ必要で、多相流ではなぜ難しいのか

Rhie-Chow 補間（momentum-weighted interpolation, MWI）は、collocated 格子においてチェッカーボード状の圧力振動を抑制するために面（face）流速を補正する核心的な手法です。単相流では比較的単純ですが、多相流へと拡張する場合、圧力、重力、表面張力、非定常補正項の一貫した処理が決定的に重要になります。

この記事では、Rhie & Chow (1983) のオリジナルから Bartholomew et al. (2018) の統合フレームワーク、そして OpenFOAM の interFoam/compressibleInterFoam における実装までを詳しく解説します。

---

1. 半離散化運動量方程式からの面流速の導出

すべての Rhie-Chow 変形版の出発点は、セル中心 [math] における半離散化（semi-discretized）運動量方程式です。

[equation]

- [math]: 対角係数（時間微分、対流、拡散の寄与を含む）
- [math]: 隣接セルの寄与 + 明示的なソース項

セル中心流速について解くと以下のようになります。

[equation]

問題点：チェッカーボード振動

このセル中心流速を単純な線形補間で面に適用すると、圧力勾配が [math] と [math] のみを結び、[math] を飛び越えてしまうため、奇偶分離（チェッカーボード現象）が発生します。

Rhie-Chow の解決策

面において運動量方程式自体を再構成し、広いステンシルの補間された圧力勾配を、狭い（compact）面中心の圧力勾配で置き換えます。

[equation]

ここで [math] は隣接セルの値から直接計算した面勾配であり、オーバーバーはセル中心値の線形補間を表します。

圧力補正項 [math] は [math] に比例するローパスフィルタとして機能し、チェッカーボード現象を抑制します。

---

2. 主要論文による寄与

Rhie & Chow (1983): オリジナル

AIAA Journal に発表されたオリジナルは、定常流の SIMPLE アルゴリズム専用でした。

[equation]

[math] は圧力勾配を除去した疑似速度、[math] です。圧力補正項のみが含まれており、非定常項や緩和（relaxation）項の処理はありませんでした。その後、Majumdar (1988) が収束解の緩和係数依存性を、Choi (1999) が非定常流における時間ステップ依存性を指摘しました。

Jasak (1996): OpenFOAM の基礎 - H/A アプローチ

インペリアル・カレッジの博士論文で、非構造多面体格子における有限体積法を体系化しました。Rhie-Chow を明示的な補正項なしで暗黙的に実装しているのが特徴です。

[equation]

HbyA = H/A は圧力の影響を除去した速度予測子であり、圧力方程式は [math] として導出されます。Rhie-Chow 効果は、ラプラス演算子の離散化（face snGrad）と速度補正の勾配（ガ…

---
Read more: https://cfdblog.cc/ja/posts/rhie-chow-multiphase]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/rhie-chow-multiphase</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/rhie-chow-multiphase</guid>
      <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Multiphase</category>
      <category>Rhie-Chow</category>
      <category>OpenFOAM</category>
      <category>Numerical-Methods</category>
    </item>
    <item>
      <title><![CDATA[FDM vs FEM vs FVM：3つの離散化手法の本質的な違い]]></title>
      <description><![CDATA[有限差分法（FDM）、有限要素法（FEM）、有限体積法（FVM）の数学的な出発点、メリット・デメリット、そしてそれぞれが真価を発揮する領域を比較します。

[7 min read · 3,421 words]]]></description>
      <content:encoded><![CDATA[import { StencilCompare } from '@/components/post-viz/fdm-fem-fvm/StencilCompare'

同じ PDE、3つの道

偏微分方程式（PDE）をコンピュータで解くためには、連続的な空間を 離散化（discretization） する必要があります。同じ方程式であっても、どのような哲学で離散化するかによって、全く異なる数値手法になります。

ここでは、単純な 1D 移流拡散方程式を例に挙げます。

[equation]

この一つの方程式に対して、FDM、FEM、FVM がそれぞれどのようにアプローチするのかを見ていきましょう。

---

1. 有限差分法（Finite Difference Method, FDM）

コア・アイディア

> 微分を 差分（difference） で直接近似する。

最も直感的なアプローチです。格子点（node）における関数値をテイラー展開（Taylor expansion）し、導関数を近似します。

数学的な出発点：テイラー展開

点 [math] におけるテイラー展開は以下の通りです。

[equation]

ここから差分近似を導き出します。

前進差分（Forward Difference）：
[equation]

中心差分（Central Difference）：
[equation]

二階導関数：
[equation]

移流拡散方程式への適用

中心差分を使用すると、以下のようになります。

[equation]

これは格子点の未知数 [math] に関する連立常微分方程式（ODE）システムとなります。

メリットとデメリット

メリット：
- 概念が単純で実装が容易
- 構造格子（structured grid）において非常に効率的
- 高次精度の達成が容易（コンパクトスキーム、スペクトルライクスキームなど）
- 直交格子において行列構造が綺麗（帯行列）

デメリット：
- 非構造格子（unstructured grid）への適用が困難 — これが致命的な欠点です
- 複雑な形状に対する格子生成が難しい
- 保存則を自動的には満足しない

代表的な適用分野

- DNS/LES（直交格子ベースの乱流シミュレーション）
- 気象・海洋モデル（構造格子）
- 地震波伝播シミュレーション
- コンパクトスキームベースの高精度計算

---

2. 有限要素法（Finite Element Method, FEM）

コア・アイディア

> 解を 基底関数（basis function）の線形結合 で近似し、重み付き残差（weighted residual） を最小化する。

FEM は微分方程式を直接解くのではありません。代わりに 弱形式（weak formulation） と呼ばれる積分形式に変換します。

数学的な出発点：弱形式（Weak Form）

元の PDE（強形式、strong form）にテスト関数 [math] を掛けて積分します。

[equation]

拡散項に部分積分（integration by parts）を適用すると、以下のようになります。

[equation]

これが 弱形式 です。以下の重要な変化に注目してください。

- 元々は二階導関数が必要でしたが、部分積分後は 一階導関数のみ で済みます。
- 解の連続性に対する要求が緩和されます（[math]）。
- 境界条件が自然に含まれます…

---
Read more: https://cfdblog.cc/ja/posts/fdm-fem-fvm]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/fdm-fem-fvm</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/fdm-fem-fvm</guid>
      <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>CFD</category>
      <category>FDM</category>
      <category>FEM</category>
      <category>FVM</category>
      <category>Numerical-Methods</category>
    </item>
    <item>
      <title><![CDATA[Numerical Dungeon: ゲームで学ぶ数値解析]]></title>
      <description><![CDATA[CFL条件から圧縮性多相流まで、5つのダンジョンをクリアしながら数値解析の核心概念をマスターしましょう。

[1 min read · 657 words]]]></description>
      <content:encoded><![CDATA[Numerical Dungeon

数値解析を本だけで学ぶのは退屈です。
5つのステージをクリアしながら核心概念を体得しましょう。

ルール

- HP 3 - 不正解でHPが1減ります。HPが0になるとゲームオーバー!
- XP - 正解ごとにXPを獲得します。後半ほど報酬が大きくなります。
- 難易度 - ステージ12は基礎、34は中核理論、5は最終ボスです。

各ステージではまず概念解説を読み、続くクイズに答えます。
間違えても詳しい解説が出るので、学びの機会としてください。

---

---

ステージごとに深掘り

ダンジョンをクリアしたら、各テーマをもっと深く学んでみましょう:

Stage 1: CFL 条件
CFL条件はdomain of dependence(依存域)の概念と直結します。
数値情報の伝播速度が物理情報の伝播速度を上回る必要があります。
陰的(implicit)スキームはCFL制限がありませんが、非線形システムを解く代償があります。

Stage 2: 数値拡散
数値拡散を減らすには高次スキームが必要ですが、
Godunovの定理により非線形リミタが必要です。
代表的なリミタ: minmod, van Leer, superbee, MC limiter。

Stage 3: Godunovの定理
この定理がTVD(Total Variation Diminishing)、ENO、WENOなど
現代の数値手法の発展を促しました。
核心は「非線形性こそ高次+安定の鍵」ということです。

Stage 4: Riemann 問題
Sod、Lax、Shu-Osherなど標準テスト問題でRiemann solverを検証できます。
このブログのRiemann問題からGodunov型スキームまでをご覧ください。

Stage 5: 多相流圧力振動
Abgrallの条件は多相流数値解析の出発点です。
5方程式モデル実装ガイドで実際のコードを確認してください。

---
Read more: https://cfdblog.cc/ja/posts/numerical-dungeon]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/numerical-dungeon</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/numerical-dungeon</guid>
      <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>CFD</category>
      <category>Numerical-Methods</category>
      <category>Interactive</category>
      <category>Education</category>
    </item>
    <item>
      <title><![CDATA[5-Equation Model 実装ガイド：Python で作る多相流ソルバー]]></title>
      <description><![CDATA[5-equation diffuse interface model を Python で直接実装し、1D 衝撃波と気泡の相互作用問題をシミュレーションします。

[2 min read · 904 words]]]></description>
      <content:encoded><![CDATA[import { VolumeFractionAdvect } from '@/components/post-viz/five-equation-model/VolumeFractionAdvect'

5-Equation Model を直接実装する

理論だけではなかなか実感が湧かないものです。
この記事では、1D 5-equation diffuse interface model を Python で直接実装し、衝撃波が気体（ガス）の気泡を貫通する問題をシミュレーションします。

支配方程式の整理

1D 5-equation model の保存変数とフラックスは以下の通りです。

[equation]

5番目の方程式（[math]）は非保存型であるため、別に処理します。

[equation]

状態方程式：Stiffened Gas EOS

両方の流体で stiffened gas EOS を使用します。

[equation]

混合則（mixture rule）を用いて全体の圧力を求めます。

[equation]

Python による実装

初期設定と EOS

[code block]

HLLC フラックスの計算

[code block]

時間積分（1次精度）

[code block]

初期条件：衝撃波と気泡

python
初期条件：水中の空気の気泡に衝撃波が当たる問題
U = np.zeros((4, N))
alpha1 = np.zeros(N)

for i in range(N):
    if x[i]

---
Read more: https://cfdblog.cc/ja/posts/five-equation-model]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/five-equation-model</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/five-equation-model</guid>
      <pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Multiphase</category>
      <category>Diffuse-Interface</category>
      <category>Python</category>
      <category>Implementation</category>
    </item>
    <item>
      <title><![CDATA[界面捕捉法の比較：VOF vs Level Set vs Diffuse Interface]]></title>
      <description><![CDATA[圧縮性多相流における界面追跡の主要な3つの手法について、原理、長所・短所、および適用例を比較します。

[3 min read · 1,711 words]]]></description>
      <content:encoded><![CDATA[import { VOFvsLevelSet } from '@/components/post-viz/interface-capturing/VOFvsLevelSet'

界面をどのように扱うか

圧縮性多相流シミュレーションにおいて、最も根本的な問いの一つは
「二つの流体間の界面 (interface) を数値的にどのように表現するか」です。

大きく分けて三つの系統の方法が存在します。

1. Volume of Fluid (VOF)
2. Level Set
3. Diffuse Interface (拡散界面)

1. Volume of Fluid (VOF)

原理

各セルにおいて特定の流体が占める 体積分率 (volume fraction) [math] を追跡します。

[equation]

[math] であればそのセルは流体Aで満たされており、
[math] であれば流体B、[math]: 流体A
- $\phi

---
Read more: https://cfdblog.cc/ja/posts/interface-capturing]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/interface-capturing</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/interface-capturing</guid>
      <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Multiphase</category>
      <category>VOF</category>
      <category>Level-Set</category>
      <category>Diffuse-Interface</category>
    </item>
    <item>
      <title><![CDATA[Riemann 問題から Godunov 法まで - 数値フラックスの核心]]></title>
      <description><![CDATA[CFD の心臓部である Riemann 問題を深掘りし、Exact/Approximate Riemann Solver がどのように数値フラックスを決定するのかを解説します。

[3 min read · 1,312 words]]]></description>
      <content:encoded><![CDATA[import { RiemannFan } from '@/components/post-viz/riemann-solvers/RiemannFan'

Riemann 問題：CFD の心臓

有限体積法 (Finite Volume Method) において、セル境界の 数値フラックス (numerical flux) をどのように計算するかは、解の正確さと安定性を左右する極めて重要な要素です。この数値フラックスを決定する鍵となるのが Riemann 問題 です。

Riemann 問題とは？

初期条件が一つの不連続面を境に、左右で異なる定数値を持つ初期値問題のことです。

[equation]

1次元 Euler 方程式に対し、この問題の解析解は三つの波 (wave) で構成されます。

1. 左向きの波 (rarefaction または shock)
2. 接触不連続 (contact discontinuity)
3. 右向きの波 (rarefaction または shock)

Godunov のアイデア (1959)

Godunov の核心となる洞察は、シンプルながらも強力なものでした。

> セル境界におけるフラックスを求めるには、隣接する二つのセルの平均値を左右の状態量として、Riemann 問題を解けばよい。

有限体積法の更新公式は以下の通りです。

[equation]

ここで [math] こそが、Riemann 問題の解から決定される数値フラックスです。

Exact Riemann Solver

厳密な Riemann 解法 (Exact Riemann Solver) では、Newton-Raphson 反復法を用いてスター領域 (star region) の圧力 [math] を求めます。左右の波の種類 (shock/rarefaction) に応じて、Rankine-Hugoniot 関係式または等エントロピー関係式を適用します。

衝撃波 (Shock wave) の関係式 ([math], [math] or [math]):

[equation]

ここで [math]、 [math] です。

膨張波 (Rarefaction wave) の関係式 ([math]):

[equation]

[math] は以下の条件を満足します。

[equation]

Approximate Riemann Solver：なぜ必要なのか？

厳密解法は反復計算が必要なため、計算コストが高くなります。実際の CFD コードでは、その多くが 近似 Riemann 解法 (Approximate Riemann Solver) を使用しています。

Roe Solver (1981)

Roe は非線形な Riemann 問題を 線形化 (linearization) し、行列 [math] に対する線形 Riemann 問題へと変換します。

[equation]

Roe 平均 (Roe average) を用いて [math] を構成します。

[equation]

長所: 接触不連続を正確に捕捉。 短所: エントロピー条件に違反する可能性（エントロピー修正が必要）。

HLLC Solver (Toro, 1994)

HLL 解法を改良し、 接触不連続 (Contact) を復元 したものが HLLC です。三つの波の速度 (wave speed) [math] を推定します。

$$
\h…

---
Read more: https://cfdblog.cc/ja/posts/riemann-solvers]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/riemann-solvers</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/riemann-solvers</guid>
      <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Riemann-Solver</category>
      <category>Godunov</category>
      <category>Numerical-Methods</category>
    </item>
    <item>
      <title><![CDATA[圧縮性多相流CFD入門:なぜ難しく、なぜ重要か]]></title>
      <description><![CDATA[圧縮性多相流の数値解析が単相流と根本的に異なる理由、そしてこの分野が今なお活発な研究テーマである理由を整理します。

[2 min read · 1,069 words]]]></description>
      <content:encoded><![CDATA[import { SpeedOfSoundMix } from '@/components/post-viz/compressible-multiphase-intro/SpeedOfSoundMix'

圧縮性多相流とは?

流体力学において多相流(multiphase flow)とは、2つ以上の相(phase)が共存する流れを指します。
水と空気、燃料液滴と高温ガス、水中爆発における気泡などが代表例です。

ここに圧縮性(compressibility)が加わると問題は急激に複雑になります。
各相が異なる状態方程式(EOS)を持ち、界面(interface)を挟んで
衝撃波(shock wave)が発生し、反射、透過、屈折します。

単相圧縮性流との違い

単相Euler方程式は次の通りです:

[equation]

ここで保存変数は [math] であり、
単一EOS(例: 理想気体 [math])でシステムが閉じます。

多相流では界面を境にEOSが変わります。
気体領域では [math] の理想気体、
液体領域ではstiffened gas EOSを使うとすると:

[equation]

問題は数値的に界面付近で2つのEOSが混合(mixing)された時に発生します。
保存変数ベースで単純に平均を取ると、非物理的な圧力振動(pressure oscillation)が生じます。

なぜ難しいか:中核的な3つの難題

1. 界面における圧力振動

最も有名な問題です。1994年にAbgrallが指摘して以来、
この問題を解決することが多相流数値手法の出発点となりました。

> 「圧縮性多相流数値解析の歴史は、すなわち圧力振動との戦いの歴史である。」

単純な保存型有限体積法は、界面で
[math] が中間値を取ることでspurious oscillationを生み出します。

2. 状態方程式の多様性

実際の問題では理想気体だけでは不十分です。
水はTait EOSまたはstiffened gas EOS、
高圧状態ではJones-Wilkins-Lee (JWL) EOS、
反応性流では化学反応と結合したEOSが必要です。

各EOSに対してRiemann solverを一般化する必要があるため、実装の複雑さが大きく上がります。

3. 界面追跡 vs 界面捕捉

界面をどう扱うかは大きく2つのアプローチがあります:

| アプローチ | 手法 | 利点 | 欠点 |
|--------|------|------|------|
| Sharp interface | Ghost Fluid, Front Tracking | 界面が鮮明 | 相変化の処理が困難 |
| Diffuse interface | 5方程式、6方程式モデル | 相変化を自然に処理 | 界面のスメアリング |

なぜ重要か

圧縮性多相流シミュレーションは多様な工学分野で核心的です:

- 水中爆発(UNDEX): 艦艇の生存性評価
- 超音速燃焼: スクラムジェットエンジン内部の燃料噴射/混合
- 医療分野: 衝撃波結石破砕(lithotripsy)における気泡挙動
- 宇宙推進: 極低温推進剤のスロッシング(sloshing)

次の記事では

この分野の核心的ツールであるRiemann問題とGodunov型スキームを扱います。
単相Euler方程式のRiemann問題をまず理解した上で、
これが多相流にどう拡張されるかを見ていきます。

α≈0.…

---
Read more: https://cfdblog.cc/ja/posts/compressible-multiphase-intro]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/compressible-multiphase-intro</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/compressible-multiphase-intro</guid>
      <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>CFD</category>
      <category>Multiphase</category>
      <category>Compressible-Flow</category>
      <category>Introduction</category>
    </item>
    <item>
      <title><![CDATA[[非公開] 執筆中の記事]]></title>
      <description><![CDATA[この記事はメイン一覧に表示されず、パスワード入力でのみプレビュー可能です。

[1 min read · 39 words]]]></description>
      <content:encoded><![CDATA[シークレット記事

この内容は管理者パスワードを入力した場合のみ表示されます。

[equation]

---
Read more: https://cfdblog.cc/ja/posts/draft-post]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/draft-post</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/draft-post</guid>
      <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Draft</category>
      <category>Test</category>
    </item>
    <item>
      <title><![CDATA[Contentlayer & LaTeXでブログを始める]]></title>
      <description><![CDATA[Next.js 16とContentlayerで技術ブログを構築するガイド

[1 min read · 63 words]]]></description>
      <content:encoded><![CDATA[こんにちは!

このブログはNext.jsとContentlayerで作成されています。

数式テスト (LaTeX)

インライン数式: [math]

ブロック数式:
[equation]

コードテスト

[code block]

---
Read more: https://cfdblog.cc/ja/posts/hello-blog]]></content:encoded>
      <link>https://cfdblog.cc/ja/posts/hello-blog</link>
      <guid isPermaLink="true">https://cfdblog.cc/ja/posts/hello-blog</guid>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@cfdblog.cc (Younglin)</author>
      <category>Next.js</category>
      <category>Contentlayer</category>
      <category>MDX</category>
      <category>LaTeX</category>
    </item>
  </channel>
</rss>