Skip to content
cfd-lab:~/en/posts/2026-03-24-paper-review-…● online

Translated from the author's Korean original. Read the original (한국어)

NOTE #009DAY TUE 유체역학DATE 2026.03.24UPDATED 2026.10.19READ 5 min read#Paper-Review#PINN#Deep-Learning#Turbulence-Model

[Paper Review] Physics-Informed Neural Networks for Turbulence Modeling

A tenfold rise in Re cuts the viscous residual by ten. Once λ erases the sensor term, the table's 1% no longer belongs to that run.

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).

Drag λ_PDE, λ_BC, and λ_data. Which term tilts the loss surface changes with those sliders.

손실 가중치 λ가 너무 작으면 그 항이 안 떨어지고, 너무 크면 다른 항을 짓누른다. Re가 커지면 PDE 항이 stiff 해진다 — PINN의 핵심 난점.

If only the data term deepens, the sensor fit stays and the zero-divergence condition lets go. If only the physics term deepens, the equations get closer while the pressure sensors and the velocity part ways.


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:

L=Ldata+λ Lphysics\mathcal{L} = \mathcal{L}_{\text{data}} + \lambda \, \mathcal{L}_{\text{physics}}

Data Loss Ldata\mathcal{L}_{\text{data}} is the difference between observations (e.g., pressure sensors) and neural network predictions.

Physics Loss Lphysics\mathcal{L}_{\text{physics}} is the residual of the incompressible Navier-Stokes equations:

Lphysics=∥∂u∂t+(u⋅∇)u+∇p−1Re∇2u∥2+∥∇⋅u∥2\mathcal{L}_{\text{physics}} = \left\| \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u} \cdot \nabla)\mathbf{u} + \nabla p - \frac{1}{Re}\nabla^2\mathbf{u} \right\|^2 + \left\| \nabla \cdot \mathbf{u} \right\|^2

The second term is the continuity equation (mass conservation). Since the neural network is trained to minimize this residual toward zero, the predictions always approximately satisfy the N-S equations.

Derivatives are calculated using automatic differentiation in PyTorch/TensorFlow, eliminating the need for separate numerical discretization.

How a time integrator stiffens as 1Re\frac{1}{Re} shrinks is the grid-side story in an asymptotic-preserving scheme that does not kill sound at low Mach. Here the same stiffness shows up as a loss weight.


Key Results#

CaseConditionsResults
Flow around 2D circular cylinderRe=100, pressure sensors onlyVelocity field reconstruction error under 1%, accurately recovered vortex frequency
Lid-driven cavityRe=1000Velocity profile matches DNS results within 1%
Reynolds number inversionVelocity data onlySuccessfully identified the Re value itself as a learned parameter

The inverse problem capability is particularly impressive. It is possible to estimate the Reynolds number from the flow field or restore a hidden pressure field from velocity data alone—problems that are impossible or extremely difficult with traditional methods.

Split the two Reynolds numbers in the table by the viscous piece. The cylinder is Re=100. The cavity is Re=1000. A factor of ten. The viscous piece of the momentum residual is 1Re\frac{1}{Re}, so if the velocity scale sits near 1 the convection (u⋅∇)u(\mathbf{u} \cdot \nabla)\mathbf{u} stays the same size and only the viscous piece drops by ten. The continuity residual ∥∇⋅u∥2\left\| \nabla \cdot \mathbf{u} \right\|^2 has no Re in it. If λ is the balance between the data term and the physics term, keeping the viscous piece next to the sensors at Re=1000 means λ has to hold harder than it did at Re=100.

The cylinder, from pressure sensors alone, comes back with velocity error under 1% and the vortex frequency restored. The cavity stays within 1% of DNS. Both numbers live at 1%. That slot exists when Ldata\mathcal{L}_{\text{data}} and λ Lphysics\lambda \, \mathcal{L}_{\text{physics}} do not erase each other. Raise λ until the sensor term is buried and a handful of pressure points no longer pin the velocity to 1%. Lower λ and the fit remains while the divergence-free condition lets go. The table records one point where the balance held. It does not say the 1% survives an arbitrary move of λ.

The Re inversion gives only velocity and lets Re be a learned parameter. The coefficient in the viscous term is itself unknown. A wrong 1Re\frac{1}{Re} rescales that whole piece, and the data term can hide the error inside the pressure gradient while it matches the velocity. A small λ makes that hiding cheap. The table's successful identification is the result from a setting where λ made the hiding expensive.


Practical Applicability#

When is it useful?

  • Situations with sparse experimental measurement data (only a few sensors available).
  • Inverse problems: When physical properties (viscosity, Re) need to be calculated back from measurements.
  • Physics-based data interpolation: Filling in gaps in experimental data using physical laws.

Can it replace OpenFOAM/Fluent immediately?

Not yet. Training time is tens to hundreds of times slower than an FVM solver. A simple channel flow can take several hours on a GPU. It is currently unsuitable for real-time engineering analysis.

However, research into hybrid use with OpenFOAM is active—using FVM for an approximate solution and PINN for fine-grained calibration.

# Example of physics loss calculation implemented in PyTorch
def physics_loss(model, x, t, Re):
    x.requires_grad_(True)
    t.requires_grad_(True)
 
    output = model(x, t)
    u, v, p = output[:, 0], output[:, 1], output[:, 2]
 
    # Calculate partial derivatives using automatic differentiation
    u_t = torch.autograd.grad(u.sum(), t, create_graph=True)[0]
    u_x = torch.autograd.grad(u.sum(), x, create_graph=True)[0][:, 0]
    u_y = torch.autograd.grad(u.sum(), x, create_graph=True)[0][:, 1]
    p_x = torch.autograd.grad(p.sum(), x, create_graph=True)[0][:, 0]
 
    # X-momentum equation residual
    residual_u = u_t + u * u_x + v * u_y + p_x - (1/Re) * (u_x + u_y)
 
    return (residual_u**2).mean()

Where Raising λ Erases the Sensor Term#

At high Re in three dimensions the high-frequency part of the residual does not stay in the network. A thin boundary layer makes training wander, and a standard PINN does not hand back the width of that wander. Splitting the domain, or starting from an FVM field, is the next choice, not a patch on λ.

A time step that stops paying you back is the same kind of bill as a loss weight. A window where five times Δt bought 1.9 times the speed and ten times Δt bought nothing is that curve. λ behaves the same way. Past a point it only erases the sensor term.

Share if you found it helpful.