<?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 (en)</title>
    <description>Field notes from a compressible multiphase CFD researcher — equations, code, interactive visualizations</description>
    <link>https://cfdblog.cc/en</link>
    <atom:link href="https://cfdblog.cc/feed-en.xml" rel="self" type="application/rss+xml"/>
    <language>en-US</language>
    <managingEditor>noreply@cfdblog.cc (Younglin)</managingEditor>
    <lastBuildDate>Sun, 03 May 2026 20:09:47 GMT</lastBuildDate>
    <ttl>1440</ttl>
    <item>
      <title><![CDATA[Implicit Diffusion and the Thomas Algorithm — Buying Stability with One Tridiagonal Solve]]></title>
      <description><![CDATA[Past the explicit blow-up wall, the cost of unconditional stability is one O(N) sweep

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

I once kicked off a simulation at 11pm and came back the next morning to a results file full of NaNs. I had just doubled the grid resolution and forgotten to shrink the time step. Forgetting the CFL (Courant–Friedrichs–Lewy) condition cost an hour of cluster time.

Explicit diffusion has a brutal scaling law: halve the grid spacing and you must quarter the time step. A 1024-point problem costs hundreds of thousands of steps for the sole reason of not exploding. This post is about the one-line escape — the implicit method — and the algorithm that makes it almost free in 1D: the Thomas tridiagonal solve. At the end you'll push the time step yourself and watch explicit blow up while implicit stays calm.

CFL Locks Down Fine Grids

The diffusion equation is

[equation]

where [math] is concentration (or temperature) and [math] the diffusion coefficient. The simplest explicit scheme (forward Euler with central differences) reads

[equation]

For stability we need [math]. A one-line von Neumann analysis: the shortest wavelength (two cells) has amplification factor [math], and forcing it [math] gives [math].

The trouble is the square in the denominator. Going from [math] cells slashes [math] by a factor of four. That is order-of-magnitude tyranny.

Push the Future to the Right Side

The fix is almost embarrassing in its simplici…

---
Read more: https://cfdblog.cc/en/posts/2026-05-04-implicit-diffusion-thomas-algorithm]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-05-04-implicit-diffusion-thomas-algorithm</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[[Paper Review] When the Sound Speed Diverges and the Time Step Survives — Orlando–Bonaventura (2024) AP-IMEX for Non-Ideal Gases]]></title>
      <description><![CDATA[An AP-IMEX-DG scheme that frees the time step from the sound speed across all Mach numbers and any EOS, reproduced in NumPy.

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

Atmospheric models run at Mach 0.001. Cosmic explosion simulations run at Mach 100. The dream of solving both with a single solver is half a century old. Orlando and Bonaventura's 2024 paper (arXiv:2402.09252v4) drags that dream into non-ideal gases. Two ideas carry the load. Treat only the pressure term implicitly in time, and the time step decouples from the sound speed. Then the same trick survives intact under the SG-EOS and any general cubic EOS (Van der Waals, Peng–Robinson).

30-second snapshot

- Authors: Giuseppe Orlando, Luca Bonaventura
- Affiliation: École polytechnique / Politecnico di Milano
- arXiv: 2402.09252v4 (v4, October 22, 2025)
- Goal: asymptotic-preserving (AP) time integration valid for all Mach numbers and any EOS
- Spatial discretization: Discontinuous Galerkin
- Benchmarks: isentropic vortex, Gresho vortex, RT instability, transonic shock — extended to SG-EOS and cubic EOS

Two places where explicit schemes break

Explicit time integration breaks twice when two time scales collide.

The first is the sound speed. In the compressible Euler system, signals travel at [math]. As [math] shrinks, [math] overwhelms [math]. The explicit CFL is bound by [math], so a 100-fold drop in [math] costs you a 100-fold drop in [math]. Atmospheric and ocean models routinely fall into this trap.

The second is the EOS nonlinearity. For…

---
Read more: https://cfdblog.cc/en/posts/2026-05-03-orlando-bonaventura-ap-imex-nonideal-gas]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-05-03-orlando-bonaventura-ap-imex-nonideal-gas</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[[Paper Review] Pick the Reconstruction with Smaller Jumps — Deng (2018) MUSCL-THINC-BVD]]></title>
      <description><![CDATA[Choosing between two candidate reconstructions by minimizing total boundary variation

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

In 2018 the Xiao group at Tokyo Tech ran a measurement nobody likes to publish. They simulated a compressible two-phase flow for 1000 steps and measured the interface thickness afterward. The jump that started one cell wide had spread across eight cells. WENO did not help much either. Even schemes whose dissipation looks small per step accumulate into a smeared interface over long simulations. This post unpacks their answer to that problem — the MUSCL-THINC-BVD reconstruction. The idea is simple. For every cell, build two candidate reconstructions at once, then keep the one whose jumps at cell boundaries are smaller.

One-Page Summary

- Authors / Journal: Deng, Inaba, Xie, Shyue, Xiao. Journal of Computational Physics 371 (2018) 945–966.
- Target problem: Material interfaces in the five-equation model for compressible two-phase flow get progressively smeared over time.
- Proposal: At every cell, build a MUSCL reconstruction (for smooth regions) and a THINC reconstruction (for jumps). Compare the jump of each candidate at the cell boundaries and keep the smaller one. This is the BVD (Boundary Variation Diminishing) rule.
- What's different: No post-processing anti-diffusion or artificial compression. The same BVD rule is applied to volume fraction and to every other conservative variable, so consistency between variables is automatic.

Two Deman…

---
Read more: https://cfdblog.cc/en/posts/2026-05-02-muscl-thinc-bvd-interface-reconstruction]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-05-02-muscl-thinc-bvd-interface-reconstruction</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[When Characteristics Collide, a Shock Is Born — Burgers and the (x,t) Plane]]></title>
      <description><![CDATA[How nonlinear self-advection breaks a smooth curve into a shock.

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

In 1948 the Dutch physicist J. M. Burgers tossed out a one-line equation as a model for turbulence. A smooth curve breaks into a vertical cliff in finite time, with no external force — the shortest drama in nonlinear hyperbolic PDEs. This post reads off the shock-formation time by hand from the geometry of characteristics (the spacetime curves along which information travels), shows how a weak solution (defined integrally where differentiability fails) cuts the multivalued region with a single line, and reproduces the same picture in 60 lines of Python. At the end you can grab the (x,t) plane and watch lines collide for yourself.

Two Lines Meet at One Point

Hyperbolic equations are about signal propagation. As long as information flows along characteristics at fixed speeds, life is peaceful. For linear advection [math] with constant [math], the characteristics are parallel straight lines and the initial profile simply slides sideways. There is no room for a shock in this picture.

Nonlinearity changes everything. When [math] depends on [math] itself, large values move fast and small values move slow. The instant a fast piece overtakes a slow piece, two values of [math] arrive at the same [math] point. The function becomes multi-valued — physically nonsense — and that nonsense is the birth of a shock.

A Self-Advecting Equation

The conservative for…

---
Read more: https://cfdblog.cc/en/posts/2026-05-01-burgers-characteristics-shock-formation]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-05-01-burgers-characteristics-shock-formation</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[Water Boils at 20°C Too — The Physics of Cavitation]]></title>
      <description><![CDATA[How depressurization makes water boil, the cavitation number, and the 10,000-bar collapse.

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

Water boils at 20°C. You only need to drop the pressure enough. The schoolbook line "water boils at 100°C" hides a missing footnote: at 1 atm. What actually controls boiling is the balance between the saturation vapor pressure and the local static pressure. When water accelerates past a pump impeller or the tip of a ship's propeller, the static pressure drops, and room-temperature water suddenly boils. We call that cavitation. This post explains why it starts, how to measure the danger with a single dimensionless number, and how a vanishing bubble launches a 10,000-bar shock that eats steel. The last two sections give you a small Python tool and a venturi simulator you can drag around.

Boiling is not about temperature

Water's saturation vapor pressure is a function of temperature.

| Temperature | Vapor pressure [math] |
|---|---|
| 20°C | 2.34 kPa (≈ 17.5 mmHg) |
| 60°C | 19.9 kPa |
| 100°C | 101.3 kPa (≈ 760 mmHg) |
| 200°C | 1554 kPa (≈ 15 atm) |

There is nothing magical about 100°C. It is just the temperature where [math] matches 1 atm. A pressure cooker (about 2 atm) shifts the boiling point up to 120°C. On top of Mount Everest (0.3 atm) water boils at 70°C.

Run the same logic backward. To boil 20°C water, you only have to drop the pressure to about 2.5 kPa — roughly 1/40 of an atmosphere. A vacuum pump on the kitchen counter is enough.

Th…

---
Read more: https://cfdblog.cc/en/posts/2026-04-30-cavitation-number-vapor-pressure]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-30-cavitation-number-vapor-pressure</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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 Without Tears — Solving Fluids with Particles, from Kernel to Artificial Viscosity]]></title>
      <description><![CDATA[How Smoothed Particle Hydrodynamics replaces grids with particles — equations, code, traps.

[5 min read · 918 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'

In 1992 Joe Monaghan made a provocation in an astrophysics review article. Stop laying grids around stars, he argued. Instead, scatter the gas as thousands of overlapping blobs and let each blob feel its neighbors through a smooth pressure field. Thirty years later that idea — Smoothed Particle Hydrodynamics, or SPH — owns a quiet but durable corner of astrophysics, free-surface flow, and impact simulation. This post tracks the four equations that make SPH work, the traps people fall into, and lets you push particles around in the browser.

A fluid solver without a mesh

Eulerian methods nail down the coordinate system and watch the flow stream past. SPH does the opposite. Each particle carries its own velocity and density and rides along with the flow. In Lagrangian form the continuity and momentum equations are

[equation]

Here [math] is density, [math] velocity, [math] pressure, [math] gravity. The time derivative on the left becomes a plain [math] along the particle path. The catch is the spatial derivative on the right. Without a regular grid of neighbors, how do we evaluate [math]? That is the question SPH was built to answer.

The kernel W(r, h) — a virtual volume around each particle

The trick is convolution. Drop…

---
Read more: https://cfdblog.cc/en/posts/2026-04-29-sph-meshfree-particle-hydrodynamics]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-29-sph-meshfree-particle-hydrodynamics</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[Two Faces of a Whirl — Free Vortex, Forced Vortex, and Helmholtz]]></title>
      <description><![CDATA[From a bathtub drain to a tornado, what vorticity actually measures

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

Pull the plug from a bathtub and the water spins. We call that scene "the water rotates." A fluid dynamicist, looking at most of that same region, will tell you the opposite: "nothing there is rotating (irrotational)." The contradiction is fake, and inside it lives the real definition of a vortex. This post separates the two whirls that share the same picture — the free vortex with [math] velocity and the forced vortex with [math] velocity — explains what vorticity (twice the spin rate of a fluid particle) actually measures, and follows Helmholtz's theorem all the way to the claim that vortices are immortal.

Is a bathtub whirl really 'rotation'?

Two meanings hide inside one word. The first is revolution — moving in a circle around some point. The second is spin — the particle turning on its own axis. In a bathtub whirl, water particles revolve. But spin? Far from the drain, almost none. A small leaf floating on top traces circular paths but never turns its body. The same face always points toward the drain.

In fluid mechanics, "rotation" means spin. So a free vortex is classified as non-rotating everywhere except at the singular center.

Forced vs. free: same picture, different soul

Stir a bucket long enough and the entire liquid spins as a rigid body. This is the forced vortex. Each particle revolves and spins together.

[equation]

Here [math] is the …

---
Read more: https://cfdblog.cc/en/posts/2026-04-28-rankine-vortex-helmholtz]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-28-rankine-vortex-helmholtz</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[Quadtree AMR — Letting the Mesh Grow Where It Needs To]]></title>
      <description><![CDATA[Forty years of adaptive mesh data structures and refinement criteria, since Berger–Oliger

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

In 1984, Marsha Berger and Joseph Oliger at Stanford were stuck on shock tracking. Their code laid down a million cells but only about 1% of them did meaningful work near the shock. The other 99% kept recomputing a uniform free stream at high precision. The paper they published in Journal of Computational Physics that year became Berger–Oliger AMR, and the same idea now lives inside OpenFOAM's dynamicRefineFvMesh, AMReX, Chombo, and p4est. This post walks through its core — the quadtree data structure and the refinement criterion — runs a 1D adaptive grid in Python, and then watches cells split in the browser.

Why a Uniform Grid Wastes 90%

Anyone who has run a 3D compressible RANS knows the trade. Halve the grid and the per-step cost drops 8x, but the resolution near shocks, shear layers, and separation collapses with it. Refine for those features and the free-stream cells shrink too, blowing up memory and time together.

The fix is simple. Refine only where it matters. Quantitatively, this estimate captures most of the saving:

[equation]

Here [math] is the maximum refinement level, [math] is the volume that needs fine resolution, and [math] is the whole domain. For a 1D-like singularity (a shock surface), [math], which drops the cell count to single-digit percent of a uniform level-[math] grid.

h-, p-, r-: Three Flavors of Adaptation

An adaptive …

---
Read more: https://cfdblog.cc/en/posts/2026-04-27-amr-quadtree-cell-refinement]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-27-amr-quadtree-cell-refinement</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[[Paper Review] Beating the Storm Clock — Casulli–Walters (2000) Semi-Implicit Shallow Water on Unstructured Orthogonal Grids]]></title>
      <description><![CDATA[A shallow-water algorithm that stays stable at large time steps

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

In June 1990, Hamburg's BAW lab needed to reproduce 13 days of tide history in the Jade–Weser Estuary. Their grid had 150 thousand unstructured triangles, the time step needed to be 5 minutes, and the simulation had to run faster than real time so the next case could fit in the schedule. With an explicit solver, the free-surface celerity [math] sets the CFL bound. In the 28 m deep parts, [math] m/s; with a smallest cell side near [math] m, the explicit limit is 0.2 s — that is 5.6 million steps for 13 days. This post follows how Casulli and Walters (2000) broke that wall with a semi-implicit unstructured-orthogonal-grid algorithm, and runs a 1D version live. Punchline: treat only the pressure terms implicitly, and the resulting system turns out to be SPD — perfect for PCG.

Paper metadata
- Authors: Vincenzo Casulli (Univ. of Trento), Roy A. Walters (USGS)
- Journal: International Journal for Numerical Methods in Fluids, 32, 331–348 (2000)
- Title: "An unstructured grid, three-dimensional model based on the shallow water equations"
- Keywords: semi-implicit, shallow water, unstructured orthogonal grid, wetting/drying

Why an explicit solver fails on estuaries

Free-surface waves in shallow water are fast. At 10 m depth, [math] m/s; at 100 m, [math] m/s. The actual flow speed [math] is usually below 1 m/s. The physical time scale is [math],…

---
Read more: https://cfdblog.cc/en/posts/2026-04-26-casulli-walters-unstructured-shallow-water]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-26-casulli-walters-unstructured-shallow-water</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[[Paper Review] When WENO Smears Small Eddies — Fu (2019) Low-Dissipation TENO Finite-Volume Scheme]]></title>
      <description><![CDATA[Why 5th-order WENO-JS still smears smooth scales, and how TENO's sharp cutoff fixes it

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

At Stanford's Center for Turbulence Research, Lin Fu was running direct numerical simulations of turbulence when something struck him. His 5th-order WENO-JS was capturing shocks fine, but small eddies far from the shock also grew blurry over time. The scheme advertised 5th-order accuracy, yet the effective resolution felt more like a 3rd-order centered difference. This post reviews the Fu (2019) paper that pinned down the cause, and runs WENO-JS and TENO-5 side by side on the same initial condition. Short version: the smoothness of the nonlinear weights was the hidden cost all along.

Paper Info and Background

- Author: Lin Fu (Stanford Center for Turbulence Research)
- Journal: Computer Physics Communications 235 (2019) 25–39
- DOI: 10.1016/j.cpc.2018.10.009
- Keywords: TENO, High-order schemes, Shock-capturing, Low-dissipation, Finite-volume method

The Hidden Cost of WENO-JS

Classical WENO-JS (Jiang–Shu, 1996) computes smoothness indicators [math] on three small stencils [math] and blends their polynomials with nonlinear weights.

[equation]

Here [math] is the optimal linear weight that recovers 5th-order accuracy and [math] guards against division by zero. The trouble is that these weights are continuous. Even a tiny stencil perturbation nudges [math] away from [math] in regions where ideally [math] should hold, letting a lower-order poly…

---
Read more: https://cfdblog.cc/en/posts/2026-04-25-teno-low-dissipation-shock-capturing]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-25-teno-low-dissipation-shock-capturing</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[When Lax–Wendroff Shook at a Step — Building a 2nd-Order TVD Advection Scheme with Flux Limiters]]></title>
      <description><![CDATA[Sidestep Godunov's theorem to build a monotone 2nd-order advection scheme

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

In a test case, odd bumps appeared right before and right after a step. I was solving the linear advection equation (pure translation with a constant velocity field) with Lax–Wendroff, and the initial condition was a simple rectangular pulse. As a 2nd-order scheme, I expected it to be sharper than 1st-order upwind — instead the result had an undershoot in front of the step and an overshoot behind it. Logs showed CFL = 0.5, well within the stability limit.

The problem was not that the algorithm was unstable. The algorithm was not monotone.

The Source of the Oscillation — Godunov's Wall

The 1D linear advection equation is

[equation]

With constant [math], the solution is simply the initial profile shifted to the right. Numerically we define a flux [math] at each cell face and write

[equation]

This is the flux-conserving form, and it preserves conserved quantities (mass, momentum, energy) down to machine precision. Lax–Wendroff is a linear scheme that adds a 2nd-order Taylor correction to this form.

But a theorem Godunov proved in 1959 is unforgiving: no linear scheme for the linear constant-coefficient advection equation can be both monotone and 2nd-order (or higher) accurate. You must give up one of the two. Lax–Wendroff chose 2nd-order accuracy and sacrificed monotonicity — hence the oscillations at the step.

The TVD Condition: Harten's Inequality

Hart…

---
Read more: https://cfdblog.cc/en/posts/2026-04-24-flux-limiter-tvd-advection]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-24-flux-limiter-tvd-advection</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[Why Water Streams Break into Droplets — Plateau–Rayleigh Instability and Breakup Regimes]]></title>
      <description><![CDATA[The principle of surface tension fragmenting liquid jets into droplets and the dimensionless map of spray design.

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

Open your kitchen faucet halfway. Initially, you see a smooth liquid column. However, starting about 10 cm down, it breaks into regular droplets. It is a common sight, yet answering why a continuous medium spontaneously fragments is not trivial. This post follows the classic explanations provided by Joseph Plateau in 1849 and Lord Rayleigh in 1879, and explores how the Weber number (inertia/surface tension ratio) and Ohnesorge number (viscosity/inertia-surface tension ratio)—still used today in engine nozzle and inkjet design—extend those results. By the end, you will be able to answer "Why do some jets break into large droplets while others shatter like mist?" using a single regime map.

Why a Continuum Chooses to Fragment

Surface tension is a force that seeks to minimize surface area. For a fixed volume of liquid, a spherical shape has the smallest surface area. This is why a mass of water forms a sphere in zero gravity.

Now, consider a long liquid cylinder versus a chain of droplets created by cutting that cylinder at regular intervals. Which has a smaller surface area? Counter-intuitively, the chain of droplets has a smaller area—but only when the cutting interval is longer than the cylinder's circumference. This is why a water column fragments; it is a natural result of falling into a lower energy state.

Plateau's Geometric Intuition

Plateau calculat…

---
Read more: https://cfdblog.cc/en/posts/2026-04-23-plateau-rayleigh-jet-breakup]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-23-plateau-rayleigh-jet-breakup</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Fluid Mechanics</category>
      <category>Flow Phenomena</category>
      <category>Plateau-Rayleigh</category>
      <category>Weber Number</category>
      <category>Ohnesorge</category>
      <category>Jet Breakup</category>
    </item>
    <item>
      <title><![CDATA[Choosing a CFD Linear Solver: Comparing Convergence Speeds from Jacobi to BiCGSTAB]]></title>
      <description><![CDATA[Comparing the characteristics and convergence speeds of the four major Krylov subspace solvers with code and simulation.

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

In 1952, Cornelius Lanczos, Magnus Hestenes, and Eduard Stiefel coincidentally and independently presented the same result at a conference. It was an algorithm that solves symmetric positive definite (SPD) matrices in exactly [math] iterations. This is the method we now call the Conjugate Gradient (CG) method. What is interesting is that even 70 years later, this idea lives on almost exactly at the heart of CFD solvers: searching for solutions in the Krylov subspace. This post compares the convergence speeds of the four most frequently used solvers in CFD (Jacobi, Gauss-Seidel, CG, and BiCGSTAB) through Python and interactive simulations. By the end, you will be able to judge which solver is right for a given problem in practice.

Why CFD Solves Linear Systems Iteratively

When Navier-Stokes equations are discretized, a large linear system in the form [math] appears at every step. Here, [math] is the coefficient matrix, [math] is the vector of cell-centered variables, and [math] is the right-hand side source. For a 3D grid with 1 million cells, [math] becomes a sparse matrix of size [math]. LU decomposition (a direct method that splits a matrix into the product of lower and upper triangular matrices) consumes both memory and CPU at this scale. This is why open-source CFD codes like OpenFOAM, SU2, and Gerris use iterative methods without exception.

The basic idea …

---
Read more: https://cfdblog.cc/en/posts/2026-04-22-cfd-linear-solvers-krylov]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-22-cfd-linear-solvers-krylov</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Algorithms</category>
      <category>Linear-Solver</category>
      <category>Krylov</category>
      <category>Numerical Analysis</category>
    </item>
    <item>
      <title><![CDATA[Solving Wall Distance in O(N log N): Eikonal Equation and Fast Marching]]></title>
      <description><![CDATA[An efficient algorithm for calculating wall distance, an essential input for RANS turbulence models.

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

In 1996, James Sethian of UC Berkeley was refining algorithms to track vessel boundaries in medical imaging. The resulting Fast Marching Method is now used in unexpected places. Every time a RANS solver runs around an aircraft wing, this very algorithm generates the wall distance for each grid point. The Spalart-Allmaras and k-ω SST models require the value of "where is the nearest wall" as an input for every cell. This post summarizes the cost of calculating this value naively, the idea of transforming the problem into the Eikonal equation (a hyperbolic PDE of the form |∇d|=1/F), and how to obtain the solution in [math] using Fast Marching, the continuous version of Dijkstra's algorithm.

Why Turbulence Models Need Wall Distance

Statistics of boundary layer turbulence depend strongly on the distance from the wall, [math]. RANS (Reynolds-Averaged Navier-Stokes) models incorporate this dependency via algebraic expressions. Spalart-Allmaras uses [math] (wall distance) directly in its destruction term. In k-ω SST, [math] appears within the blending functions [math] and [math]. Wall distance also acts as a switch in hybrid LES models (DES, DDES, IDDES).

The problem is that [math] is a geometric property of the mesh. If the mesh moves or deforms, it must be recalculated at every time step. This is the case for rotating machinery (compressors, pu…

---
Read more: https://cfdblog.cc/en/posts/2026-04-22-wall-distance-eikonal-fast-marching]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-22-wall-distance-eikonal-fast-marching</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Algorithm</category>
      <category>Eikonal</category>
      <category>Fast-Marching</category>
      <category>Mesh</category>
    </item>
    <item>
      <title><![CDATA[Bugs Swim in Honey — The World of Flow Changed by Reynolds Number]]></title>
      <description><![CDATA[The Reynolds number revealed by non-dimensionalization, and how scale creates differences in flow.

[5 min read · 980 words]]]></description>
      <content:encoded><![CDATA[Bacteria cannot swim. To be precise, inertia-based propulsion, which we call "swimming," does not work for bacteria. Unlike us, who move forward by paddling our tails and relying on inertia, bacteria live in a world where inertia has vanished—a place much like transparent honey. This post explores why the same Navier-Stokes equations create completely different worlds depending on the scale, and how the Reynolds number (the ratio of inertial forces to viscous forces), which summarizes this difference in a single number, becomes the "hidden grammar" of fluid mechanics. At the end, we also look at why non-dimensionalization—the process of stripping the units from an equation to leave only its structure—is the first grammar of fluid mechanics.

Same Equations, Different Worlds

Blue whales swim in the ocean. The water molecules are, of course, the same water. However, for a 1 μm bacterium, water feels like a completely different substance. This is because even if the same Navier-Stokes equations are used, the dominant terms change as the scale changes.

The incompressible Navier-Stokes equations look like this:

[equation]

Where [math] is the density, [math] is the velocity field, [math] is the pressure, and [math] is the viscosity coefficient. The left side represents inertia (mass × acceleration), and [math] on the right side is the viscosity (internal friction) term. These two forces fight at every moment. Who wins?

Stripping the Equations: Non-dimensionalization

The answe…

---
Read more: https://cfdblog.cc/en/posts/2026-04-21-reynolds-number-scale-fluid-mechanics]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-21-reynolds-number-scale-fluid-mechanics</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Fluid Mechanics</category>
      <category>Flow Phenomena</category>
      <category>Reynolds</category>
      <category>Non-dimensionalization</category>
    </item>
    <item>
      <title><![CDATA[Discontinuous Galerkin Method (DGM): High-Precision Discretization for Unstructured Grid Compressible Flow Analysis]]></title>
      <description><![CDATA[Step-by-step summary from DGM weak form derivation to Gauss quadrature and unstructured grid implementation.

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

The Discontinuous Galerkin Method (DGM) is a numerical method that combines the advantages of the Finite Element Method (FEM) and the Finite Volume Method (FVM). It uses high-order polynomial basis functions within each cell and exchanges information at cell boundaries using numerical fluxes. It is a powerful option for high-precision analysis of compressible flows on unstructured grids.

Governing Equation and Flux Splitting

Conservation equation for compressible flow:

[equation]

Where:
- [math]: Vector of conservative variables
- [math]: Convective flux
- [math]: Viscous flux
- [math]: Source term

Basis Function Expansion and Weak Form Derivation

The solution within the cell [math] is approximated as a linear combination of basis functions:

[equation]

[math] is the number of degrees of freedom within the cell, determined by the approximation polynomial degree [math] ([math] in 3D).

Multiplying by a test function [math] and integrating over [math]:

[equation]

Applying Green's formula (integration by parts) splits it into volume and boundary integrals:

[equation]

[math] on the boundary is the numerical flux using information from adjacent cells (e.g., Roe, HLLC).

Mass Matrix and Time Integration

Arranging as an ODE for the [math]-th basis function coefficient:

[equation]

Where the mass matrix is:

[equation]

Using orthogonal basis functions (suc…

---
Read more: https://cfdblog.cc/en/posts/2026-04-20-discontinuous-galerkin-method-cfd]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-20-discontinuous-galerkin-method-cfd</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>High-Order Accuracy</category>
      <category>Compressible Flow</category>
    </item>
    <item>
      <title><![CDATA[FEM for Rigid Body Dynamics: Quaternion-based Rotation Handling and Inertia Tensors]]></title>
      <description><![CDATA[Methods for representing rotations with quaternions and handling inertia tensors in FEM rigid body simulations.

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

Basic Equations of Rigid Body Dynamics

Accurately describing the motion of rigid bodies is essential in Fluid-Structure Interaction (FSI) analysis or Discrete Element Method (DEM) simulations. A rigid body is an object without deformation, where the distance between any two points always remains constant.

The velocity of an arbitrary particle [math] within a rigid body is decomposed as follows:

[equation]

Where [math] is the velocity of the center of mass, [math] is the angular velocity, and [math] is the displacement vector from the center of mass to particle [math].

Linear Momentum and Angular Momentum

Total linear momentum from Newton's second law is:

[equation]

Where [math] is the total mass. The acceleration of the center of mass is:

[equation]

Total angular momentum is:

[equation]

Where [math] is the inertia tensor and [math] is the total torque.

Inertia Tensor

The inertia tensor relative to the center of mass is:

[equation]

Extending to a continuum:

[equation]

Where [math] is the identity tensor, and [math] is the outer product.

When an object rotates, the inertia tensor is transformed by the orientation matrix [math].

[equation]

Where [math] is the initial inertia tensor in the body frame, which only needs to be calculated once at the start of the simulation.

Rotation Representation Using Quaternions

Representing r…

---
Read more: https://cfdblog.cc/en/posts/2026-04-20-fem-rigid-body-dynamics-quaternion]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-04-20-fem-rigid-body-dynamics-quaternion</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Rigid Body Dynamics</category>
      <category>Quaternion</category>
    </item>
    <item>
      <title><![CDATA[Dean Flow: Analytical Solution and CFD Validation for Helical Pipe Flow]]></title>
      <description><![CDATA[A pair of Dean vortices created by centrifugal force in curved pipes — from analytical derivation to numerical validation.

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

A common question arises in the design of Helical Steam Generators:
"How much better is the heat transfer compared to a straight pipe?"
The key to the answer lies in Dean vortices — a pair of helical secondary flows generated by centrifugal force in a curved pipe.

First described by W. R. Dean in 1928, this flow is a classic problem that repeatedly appears across nuclear engineering, chemical engineering, and biomechanics. Today, we will directly derive Dean's perturbation expansion, visualize it with Python, and validate it using the finite difference method.

---

1. Problem Setup

Consider a toroidal pipe (pipe radius [math]) with a radius of curvature [math]. We define the cylindrical coordinate system [math] on the cross-section of the pipe and [math] as the arc length coordinate along the pipe axis.

[equation]

Expressing the incompressible Navier-Stokes equations in curved coordinates, a centrifugal force term is added to the axial momentum.

[equation]

In the absence of centrifugal force ([math]), this reduces directly to Poiseuille flow.

---

2. Analytical Derivation

2-1. Non-dimensionalization

Using the characteristic velocity [math] (the peak velocity of Poiseuille flow) for non-dimensionalization:

[equation]

The zeroth-order solution (Poiseuille) is:

[equation]

2-2. Definition of Dean Number

Dean introduced the following dimensionless nu…

---
Read more: https://cfdblog.cc/en/posts/2026-03-28-dean-flow-analytical-solution]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-03-28-dean-flow-analytical-solution</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Analytical Solution</category>
      <category>Classical Flow</category>
      <category>CFD Validation</category>
      <category>Dean Flow</category>
      <category>Secondary Flow</category>
      <category>Helical Pipe</category>
    </item>
    <item>
      <title><![CDATA[Poiseuille Flow: Analytical Solution Derivation and Finite Difference Validation]]></title>
      <description><![CDATA[An introductory CFD benchmark for deriving the complete analytical solution of the simplest viscous flow and validating numerical accuracy with FD code.

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

Poiseuille flow is a fully developed laminar flow driven by a constant pressure gradient between two parallel plates or inside a circular pipe.
Since an exact analytical solution exists, it appears in textbooks worldwide as the very first test case for CFD code validation.

Today, we will derive the analytical solution for channel flow (between 2D plates) step-by-step and verify the convergence order by writing a simple finite difference (FD) code.

Problem Setup

Geometry and Boundary Conditions

Consider a fully developed laminar flow between two infinite parallel plates.

- Channel half-width: [math] (plates are located at [math])
- Flow direction: [math] (assumed infinitely long)
- Boundary conditions: no-slip at both walls [math] [math]
- Driving force: constant pressure gradient [math] is a constant)

Governing Equation

Since the flow is fully developed, [math] and [math]. The [math]-direction Navier–Stokes equation is:

[equation]

Applying the fully developed conditions ([math], [math]):

[equation]

Analytical Derivation

Step 1: Simplify to an ODE

[equation]

Step 2: First Integration

[equation]

Step 3: Second Integration

[equation]

Step 4: Apply Boundary Conditions

[math]:

[equation]

[math]:

[equation]

(1) [math] (2): [math] (Symmetry)

(1) [math] (2): [math]

Final Analytical Solution

[equation]

Maximum velocity at the channel ce…

---
Read more: https://cfdblog.cc/en/posts/2026-03-28-poiseuille-flow-analytical-solution]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-03-28-poiseuille-flow-analytical-solution</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Analytical Solution</category>
      <category>Classical Flow</category>
      <category>CFD Validation</category>
      <category>Poiseuille</category>
      <category>Finite Difference</category>
    </item>
    <item>
      <title><![CDATA[[CFD Q&A] When simpleFoam Pressure Residual Fails to Converge]]></title>
      <description><![CDATA[A troubleshooting guide for SIMPLE algorithm divergence in practice — relaxation factor settings were the key.

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

I encountered a problem last week that took up quite a bit of time. While running simpleFoam, the pressure residual failed to drop below 1e-3 and, in fact, started to rise. Initially, I thought it might be a mesh issue, but the conclusion turned out to be the relaxation factor.

Problem Situation

- Software: OpenFOAM v2312
- Geometry: 2D rectangular channel, inlet–outlet boundaries
- Turbulence Model: k-ε (standard)
- Solver: simpleFoam (steady-state)

For the first 20–30 iterations, it seemed to be converging well, but then the pressure residual suddenly began to spike.

[code block]

While the velocity was converging smoothly, the pressure remained unstable. This is a typical pattern of pressure-velocity coupling instability.

Root Cause Analysis Process

Step 1: Check Mesh Quality

First, I ran checkMesh.

[code block]

Maximum non-orthogonality was 32 degrees, and max skewness was 0.8 — not bad at all. It didn't seem like a mesh problem.

Step 2: Review Boundary Conditions

I set the pressure at the inlet to zeroGradient and the outlet to fixedValue 0. These are standard settings, so no issues there.

However, checking the initial p field revealed unusually large values near the inlet. These were remnants from a previous experiment I had conducted using funkySetFields.

Step 3: Check fvSolution

[code block]

U=0.9 is a fairly aggressive value. I…

---
Read more: https://cfdblog.cc/en/posts/2026-03-27-simpleFoam-pressure-divergence]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-03-27-simpleFoam-pressure-divergence</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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 Practice</category>
      <category>QA</category>
      <category>OpenFOAM</category>
      <category>SIMPLE</category>
      <category>Convergence</category>
    </item>
    <item>
      <title><![CDATA[[OpenFOAM Tutorial] Backward Facing Step Flow Analysis — Capturing Recirculation Zones with simpleFoam]]></title>
      <description><![CDATA[A step-by-step guide to analyzing incompressible flow over a Backward Facing Step using OpenFOAM simpleFoam.

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

In this tutorial, we will simulate recirculation flow in a Backward Facing Step geometry using simpleFoam. The goal is to directly observe the recirculation zone and reattachment point formed downstream of the step.

---

Prerequisites

- OpenFOAM Version: v2312 or later (Both OpenFOAM.com and OpenFOAM.org are compatible)
- Prior Knowledge: Basic terminal commands, understanding of OpenFOAM case structure (0/constant/system)
- Required Software: ParaView 5.x or later (for results visualization)

---

Step 1: Create Case Directory

[code block]

The case structure is as follows:

[code block]

[code block]

---

Step 2: Mesh Generation — blockMeshDict

system/blockMeshDict defines the step geometry as a combination of hexahedral blocks. Below is a simplified 2D case example (step height H = 0.1 m).

[code block]

[code block]

Expected Output:
[code block]

---

Step 3: Boundary Condition Setup

0/U — Velocity Boundary Conditions

[code block]

0/p — Pressure Boundary Conditions

[code block]

0/k — Turbulent Kinetic Energy

[code block]

---

Step 4: Transport Properties and Turbulence Model Setup

constant/transportProperties

[code block]

constant/turbulenceProperties

[code block]

---

Step 5: Numerical Schemes and Solvers Setup

system/fvSchemes

[code block]

system/fvSolution

[code block]

---

Step 6: Run Analysis

[code block]

Expected Output (Conver…

---
Read more: https://cfdblog.cc/en/posts/2026-03-26-openfoam-backward-facing-step]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-03-26-openfoam-backward-facing-step</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>Tutorial</category>
      <category>simpleFoam</category>
      <category>BackwardFacingStep</category>
      <category>Turbulence</category>
    </item>
    <item>
      <title><![CDATA[Reynolds Number and Flow Transition, Through Visualization]]></title>
      <description><![CDATA[Understand Reynolds number and laminar–turbulent transition through interactive visualization

[3 min read · 437 words]]]></description>
      <content:encoded><![CDATA[What Is the Reynolds Number?

One of the most important dimensionless numbers in fluid flow is the Reynolds number (Re). It expresses the ratio of inertial to viscous forces.

[equation]

Where:
- [math]: fluid density [math]
- [math]: characteristic velocity [math]
- [math]: characteristic length [math]
- [math]: dynamic viscosity [math]
- [math]: kinematic viscosity [math]

Flow Regimes

| Reynolds range | Flow regime | Character |
|------------------|-----------|------|
| [math] | Creeping (Stokes) flow | Viscosity-dominated, fully laminar |
| [math] | Turbulent | Irregular mixing, high energy dissipation |

The Physics of Transition

The path from laminar to turbulent flow begins with the Kelvin–Helmholtz instability. At a boundary with a velocity gradient, small disturbances grow and roll into vortices, which cascade energy down the scales.

The governing equation:

[equation]

In the Navier–Stokes equations, the nonlinear term [math] on the left carries inertia, while [math] on the right damps via viscosity. The Reynolds number measures the relative size of these two.

Velocity-Field Visualization: How Flow Changes with Re

Try the simulation below to see velocity fields shift as Reynolds number changes:

What to look for:
- Low Re (Re ≈ 1–50): vectors smooth and orderly — viscosity damps disturbances immediately
- Mid Re (Re ≈ 100–500): asymmetry appears in obstacle wakes — inertia rivals viscosity
- High Re (Re > 1000): vector directions become irregular and vortex st…

---
Read more: https://cfdblog.cc/en/posts/2026-03-25-reynolds-flow-transition-visualization]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-03-25-reynolds-flow-transition-visualization</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[[Paper Review] Physics-Informed Neural Networks for Turbulence Modeling]]></title>
      <description><![CDATA[A novel approach to reconstructing flow fields from sparse data using neural networks with physical laws embedded directly in the loss function.

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

Paper Information

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

---

One-Line Summary

The paper proposes a method to reconstruct the entire velocity field from just a few pressure sensors by embedding the Navier-Stokes equations directly into the neural network's loss function (Physics-Informed).

---

Background

Existing CFD methods sit somewhere between two extremes.

Traditional Methods (k-ε, k-ω SST): Rely on empirical closure coefficients. These coefficients must be re-tuned when the Reynolds number or geometry changes, limiting generalization capability.

Pure Data-Driven Deep Learning: Requires large amounts of labeled data, and the trained models do not guarantee mass or momentum conservation. The loss function is unaware if the model produces physically nonsensical predictions.

PINNs attempt to bridge this gap. Even with sparse data, physical laws act as a regularizer.

---

Core Methodology

The total loss function of a PINN is the sum of two terms:

[equation]

Data Loss [math] is the difference between observations (e.g., pressure sensors) and neural network predictions.

Physics Loss [math] is the residual of the incompressible Navier-Stokes equations:

[equation]

The second term is the continuity …

---
Read more: https://cfdblog.cc/en/posts/2026-03-24-paper-review-pinn-turbulence-modeling]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/2026-03-24-paper-review-pinn-turbulence-modeling</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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: Learn Compressible Flow by Designing Nozzles]]></title>
      <description><![CDATA[An interactive simulator for experiencing isentropic flow, choking, and normal shocks by directly tuning the geometry and back pressure of a converging-diverging nozzle.

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

Studying converging-diverging (C-D) nozzle flow from textbooks alone makes it hard to develop intuition about how the area ratio [math] and back-pressure ratio [math] change the flow regime.

Design the nozzle yourself, then turn the back-pressure dial. Clear four levels and you'll absorb the essentials of 1D compressible nozzle flow.

---

---

Controls

- Nozzle geometry: drag the blue control points on the SVG up and down to adjust cross-section
- Back pressure: the right-side slider sets [math]
- Level select: switch with the LV1–LV4 buttons at the top

---

Level Walkthrough

Level 1: Subsonic Acceleration

The most basic case. In a converging nozzle, subsonic flow accelerates as the area shrinks.
The isentropic relation:

[equation]

Since [math], decreasing [math] increases [math]. The goal is exit Mach 0.45–0.55.

Level 2: Choking

When the flow chokes, [math] at the throat. Lowering back pressure further leaves the upstream mass flow unchanged.

Critical pressure ratio ([math]):

[equation]

Drop back pressure below this value, or make the throat narrow enough.

Level 3: Supersonic Nozzle Design

In a C-D nozzle, the flow accelerates supersonically once the area opens up beyond the throat. To reach [math]:

[equation]

And the back pressure must drop to the design pressure (Pbdesign) for fully supersonic flow without shocks.

Level 4: Shock Positioning

When the back pressure is above design but below critical, a normal shock forms inside the nozzle.
…

---
Read more: https://cfdblog.cc/en/posts/mach-architect]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/mach-architect</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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 Interpolation for Compressible Multiphase Flows]]></title>
      <description><![CDATA[From the checkerboard problem on collocated grids to balanced-force multiphase flows, we systematically summarize the mathematical essence and OpenFOAM implementation of Rhie-Chow interpolation.

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

Rhie-Chow Interpolation: Why is it necessary, and why is it tricky in multiphase flows?

Rhie-Chow interpolation (momentum-weighted interpolation, MWI) is a key technique for correcting face velocities to suppress checkerboard pressure oscillations on collocated grids. While relatively straightforward in single-phase flows, consistent treatment of pressure, gravity, surface tension, and unsteady correction terms becomes critically important when extending it to multiphase flows.

This article covers everything from the original Rhie & Chow (1983) to the unified framework of Bartholomew et al. (2018), and the interFoam/compressibleInterFoam implementation in OpenFOAM.

---

1. Deriving Face Velocity from the Semi-discretized Momentum Equation

The starting point for all Rhie-Chow variants is the semi-discretized momentum equation at the cell center [math]:

[equation]

- [math]: Diagonal coefficient (including contributions from time derivative, convection, and diffusion)
- [math]: Contribution from neighbor cells + explicit sources

Solving for the cell-center velocity:

[equation]

The Problem: Checkerboard Oscillations

If this cell-center velocity is brought to the face using simple linear interpolation, the pressure gradient only connects [math] and [math], skipping [math], which leads to odd-even decoupling (checkerboard).

Rhie-Chow's Solution

By reconstructing the m…

---
Read more: https://cfdblog.cc/en/posts/rhie-chow-multiphase]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/rhie-chow-multiphase</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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: The Essential Differences Between Three Discretization Techniques]]></title>
      <description><![CDATA[A comparison of the mathematical origins, pros and cons, and best application areas for the Finite Difference Method (FDM), Finite Element Method (FEM), and Finite Volume Method (FVM).

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

One PDE, Three Paths

To solve partial differential equations (PDEs) on a computer, continuous space must be discretized. Even for the same equation, the resulting numerical technique becomes completely different depending on the philosophy used for discretization.

Let's use a simple 1D advection-diffusion equation as an example:

[equation]

We will examine how FDM, FEM, and FVM each approach this single equation.

---

1. Finite Difference Method (FDM)

Core Idea

> Approximate derivatives directly as differences.

This is the most intuitive approach. It approximates derivatives by performing a Taylor expansion of the function values at grid points (nodes).

Mathematical Origin: Taylor Expansion

Taylor expansion at point [math]:

[equation]

From this, difference approximations are derived:

Forward Difference:
[equation]

Central Difference:
[equation]

Second Derivative:
[equation]

Application to Advection-Diffusion

Using central differences:

[equation]

This results in a system of coupled ODEs for the unknowns [math] at the grid points.

Pros and Cons

Pros:
- Simple concept and easy implementation
- Highly efficient on structured grids
- Easy to achieve high-order accuracy (compact schemes, spectral-like schemes)
- Clean matrix structure on orthogonal grids (band matrix)

Cons:
- Difficult to apply to unstructured grids - this is a critical limitation
- Grid generation for complex ge…

---
Read more: https://cfdblog.cc/en/posts/fdm-fem-fvm]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/fdm-fem-fvm</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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: Learn Numerical Methods Through a Game]]></title>
      <description><![CDATA[Master core numerical methods concepts—from CFL conditions to compressible multiphase flow—by clearing five dungeon stages.

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

Learning numerical methods from textbooks alone gets dull.
Clear 5 stages and absorb the core concepts hands-on.

Rules

- 3 HP — wrong answers cost 1 HP. Game over at 0!
- XP — correct answers grant XP. Later stages reward more.
- Difficulty — Stages 1–2 are basics, 3–4 cover core theory, 5 is the final boss.

Each stage starts with a concept explanation, then a quiz.
Wrong answers come with detailed explanations—treat them as learning opportunities.

---

---

Going Deeper, Stage by Stage

After clearing the dungeon, dive deeper into each topic:

Stage 1: CFL Condition
The CFL condition ties directly to the concept of domain of dependence.
The numerical propagation speed must outpace the physical one.
Implicit schemes have no CFL limit, but you pay by solving nonlinear systems.

Stage 2: Numerical Diffusion
Reducing numerical diffusion calls for high-order schemes, but
Godunov's theorem requires nonlinear limiters.
Common limiters: minmod, van Leer, superbee, MC limiter.

Stage 3: Godunov's Theorem
This theorem catalyzed modern schemes like TVD, ENO, and WENO.
Its essence: "nonlinearity is the key to high order + stability."

Stage 4: Riemann Problem
Standard tests like Sod, Lax, and Shu–Osher validate Riemann solvers.
See this blog's From the Riemann Problem to Godunov-Type Schemes.

Stage 5: Multiphase Pressure Oscillation
Abgrall's condition is the starting point of multiphase numerical analysis.
Check actual code in 5-Equation Model Implementation Gui…

---
Read more: https://cfdblog.cc/en/posts/numerical-dungeon]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/numerical-dungeon</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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 Implementation Guide: Building a Multiphase Flow Solver in Python]]></title>
      <description><![CDATA[Directly implement a 5-equation diffuse interface model in Python and simulate a 1D shock-bubble interaction problem.

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

Implementing the 5-Equation Model

Theory alone is often not enough to fully grasp a concept. In this post, we will directly implement a 1D 5-equation diffuse interface model in Python and simulate a problem where a shock wave passes through a gas bubble.

Summary of Governing Equations

The conserved variables and fluxes for the 1D 5-equation model are as follows:

[equation]

The 5th equation ([math]) is non-conservative and is handled separately:

[equation]

Equation of State: Stiffened Gas EOS

Both fluids use the stiffened gas EOS:

[equation]

The mixture pressure is calculated using a mixture rule:

[equation]

Python Implementation

Initialization and EOS

[code block]

HLLC Flux Calculation

[code block]

Time Integration (1st order)

[code block]

Initial Conditions: Shock-Gas Bubble Interaction

python
Initial condition: shock hitting an air bubble in water
U = np.zeros((4, N))
alpha1 = np.zeros(N)

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

---
Read more: https://cfdblog.cc/en/posts/five-equation-model]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/five-equation-model</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[Interface Capturing Methods: VOF vs Level Set vs Diffuse Interface]]></title>
      <description><![CDATA[Comparing the principles, pros/cons, and applications of three representative interface capturing techniques in compressible multiphase flows.

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

How to Handle the Interface

One of the most fundamental questions in compressible multiphase flow simulation is
"how to numerically represent the interface between two fluids."

There are three main categories of methods:

1. Volume of Fluid (VOF)
2. Level Set
3. Diffuse Interface

1. Volume of Fluid (VOF)

Principles

VOF tracks the volume fraction [math] occupied by a specific fluid in each cell.

[equation]

If [math], the cell is full of fluid A; if [math], it's full of fluid B; and if [math]: Fluid A
- $\phi

---
Read more: https://cfdblog.cc/en/posts/interface-capturing]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/interface-capturing</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[From the Riemann Problem to Godunov's Scheme - The Essence of Numerical Flux]]></title>
      <description><![CDATA[Diving into the heart of CFD, the Riemann problem, and exploring how Exact/Approximate Riemann solvers determine numerical flux.

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

The Riemann Problem: The Heart of CFD

In the Finite Volume Method (FVM), the accuracy and stability of the solution depend heavily on how the numerical flux at the cell boundaries is calculated. The key to determining this numerical flux is the Riemann problem.

What is the Riemann Problem?

The Riemann problem is an initial value problem where the initial conditions consist of two constant states separated by a single discontinuity:

[equation]

For the 1D Euler equations, the analytical solution to this problem consists of three waves:

1. Left-moving wave (rarefaction or shock)
2. Contact discontinuity
3. Right-moving wave (rarefaction or shock)

Godunov's Idea (1959)

Godunov's key insight is simple yet powerful:

> To find the flux at a cell boundary, treat the average values of the two adjacent cells as the left and right states and solve the Riemann problem.

The update formula for the Finite Volume Method:

[equation]

where [math] is the numerical flux determined from the solution to the Riemann problem.

Exact Riemann Solver

An exact Riemann solver finds the pressure in the star region, [math], using the Newton-Raphson iterative method. Rankine-Hugoniot relations or isentropic relations are applied depending on the type of wave (shock or rarefaction).

Shock wave relation ([math], [math] or [math]):

[equation]

where [math] and [math].

Rarefaction wave relation ([math]):

[equation]

…

---
Read more: https://cfdblog.cc/en/posts/riemann-solvers]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/riemann-solvers</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[Compressible Multiphase Flow CFD: Why It's Hard, Why It Matters]]></title>
      <description><![CDATA[Why compressible multiphase numerics differ fundamentally from single-phase flow, and why this remains an active research field.

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

What Is Compressible Multiphase Flow?

In fluid mechanics, multiphase flow refers to flows where two or more phases coexist.
Water and air, fuel droplets in hot gas, or gas bubbles from underwater explosions are typical examples.

Add compressibility to the mix and the problem grows much harder.
Each phase carries its own equation of state (EOS); shock waves form across the interface and undergo reflection, transmission, and refraction.

How It Differs from Single-Phase Compressible Flow

The single-phase Euler equations read:

[equation]

Here the conserved variables are [math], and the system closes with a single EOS (e.g., ideal gas [math]).

In multiphase flow, the EOS changes across the interface.
If the gas region uses an ideal gas with [math] and the liquid region uses a stiffened gas EOS:

[equation]

Trouble appears numerically when the two EOS get mixed near the interface.
Naively averaging conserved variables creates non-physical pressure oscillations.

Why It's Hard: Three Core Difficulties

1. Pressure Oscillations at the Interface

The most famous issue. Abgrall pointed it out in 1994, and resolving it became the starting point of multiphase numerics.

> "The history of compressible multiphase numerics is the history of fighting pressure oscillations."

Plain conservative finite volume schemes produce spurious oscillations when [math] takes intermediate values …

---
Read more: https://cfdblog.cc/en/posts/compressible-multiphase-intro]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/compressible-multiphase-intro</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[[Private] Work in Progress]]></title>
      <description><![CDATA[This post should not appear in the main listing and is only previewable with a password.

[1 min read · 12 words]]]></description>
      <content:encoded><![CDATA[Secret Post

This content is only visible after entering the admin password.

[equation]

---
Read more: https://cfdblog.cc/en/posts/draft-post]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/draft-post</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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[Starting a Blog with Contentlayer & LaTeX]]></title>
      <description><![CDATA[A guide to building a technical blog with Next.js 16 and Contentlayer

[1 min read · 19 words]]]></description>
      <content:encoded><![CDATA[Hello!

This blog is built with Next.js and Contentlayer.

Math test (LaTeX)

Inline math: [math]

Block math:
[equation]

Code test

[code block]

---
Read more: https://cfdblog.cc/en/posts/hello-blog]]></content:encoded>
      <link>https://cfdblog.cc/en/posts/hello-blog</link>
      <guid isPermaLink="true">https://cfdblog.cc/en/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>