第一节:PDE 的统一视角
从物理过程、变量场、守恒律,到通用计算核心中的残差方程。
本节的目标不是让你立刻掌握所有偏微分方程理论,而是建立一个能服务于通用物理场软件架构的主干认识:任何物理场问题最终都要被表达为某种待求变量场满足的方程残差为零。
0. 学习目标
学完本节,你应该能把一个物理场问题拆解成软件可处理的几个基本对象。
理论目标
- 理解“变量场”是物理量在空间和时间上的函数。
- 理解多数控制方程来自守恒律、本构关系和简化假设。
- 理解强形式 PDE、初始条件、边界条件的基本结构。
- 理解为什么可以把物理问题统一写成残差方程。
工程目标
- 能把一个物理问题映射到
Field、Equation、BoundaryCondition。 - 能初步判断一个 PDE 是椭圆型、抛物型还是双曲型。
- 能为后续 FEM、FVM、SPH、MPM 的学习建立统一入口。
- 能开始建立项目中的
THEORY_DEBT.md。
1. 为什么从 PDE 统一视角开始
通用物理场软件的最大难点,不是某一个算法怎么写,而是如何在多个物理问题之间找到稳定的抽象。热传导、弹性力学、达西渗流、相场、不可压流体,看起来差别很大,但它们在计算流程上经常共享相同的骨架:
如果你只按“热模块、力学模块、流体模块”堆代码,系统会很快变成物理专用脚本集合。相反,如果你先抓住 PDE 与残差的统一结构,就可以把软件核心抽象成更稳定的层次。
2. 变量场:物理量的数学表达
物理场问题首先要回答:我们要求解的未知量是什么?这个未知量通常不是单个数字,而是在空间区域 $\Omega$ 和时间区间 $[0,T]$ 上变化的函数。
温度场
$T(x,t)$ 表示空间点 $x$ 在时间 $t$ 的温度。典型问题是热传导。
位移场
$\boldsymbol{u}(x,t)$ 表示固体材料点的位移。典型问题是弹性力学、塑性力学。
压力场
$p(x,t)$ 表示孔隙流体压力或流体压力。典型问题是达西渗流、不可压流动。
2.1 空间区域与时间区间
记计算区域为 $\Omega \subset \mathbb{R}^d$,其中 $d=1,2,3$ 分别对应一维、二维、三维问题。边界记为 $\Gamma=\partial\Omega$。
这里 $m$ 是变量分量数。温度是 $m=1$ 的标量场;三维位移是 $m=3$ 的向量场;应力通常是二阶张量场。
Field 不应该只是一个数组,而应该至少隐含这些信息:变量名称、分量数、所在区域、时间层、自由度布局、单位和物理含义。
3. 守恒律:PDE 的来源
很多 PDE 并不是凭空写出来的,而是来自“某种量在一个小体积内的积累、流入流出和源项之间的平衡”。这就是守恒律。
其中:
| 符号 | 含义 | 例子 |
|---|---|---|
| $q$ | 被守恒或演化的量 | 热量、质量、动量、相场变量 |
| $\boldsymbol{F}$ | 通量,表示该量如何穿过边界流动 | 热通量、质量通量、动量通量 |
| $s$ | 源项或汇项 | 内热源、注入源、体力、反应项 |
3.1 例子:热传导方程
以温度场 $T(x,t)$ 为例,热量积累、热通量和内热源满足:
再引入傅里叶热传导定律:
代入后得到经典热传导方程:
4. PDE 类型与计算含义
PDE 类型不是纯数学分类,它会直接影响离散方法、时间推进和求解器选择。工程上常见的三类是椭圆型、抛物型和双曲型。
椭圆型 Elliptic
典型形式:
$$-\nabla\cdot(k\nabla u)=f$$
描述稳态平衡。扰动通常会影响整个区域。
抛物型 Parabolic
典型形式:
$$\frac{\partial u}{\partial t}-\alpha\nabla^2u=f$$
描述扩散型时间演化,常见于热传导和扩散。
双曲型 Hyperbolic
典型形式:
$$\frac{\partial u}{\partial t}+c\frac{\partial u}{\partial x}=0$$
描述波传播或对流传播,存在特征方向和 CFL 限制。
| 类型 | 物理含义 | 常见例子 | 对计算的影响 |
|---|---|---|---|
| 椭圆型 | 空间平衡 | 稳态热传导、静力弹性、稳态渗流 | 通常形成大型稀疏线性或非线性方程组 |
| 抛物型 | 扩散演化 | 瞬态热传导、浓度扩散、某些相场方程 | 显式格式受时间步限制,隐式格式需解方程组 |
| 双曲型 | 波动或输运 | 弹性波、浅水方程、对流方程 | 需要关注数值耗散、激波、CFL 条件 |
5. 初始条件与边界条件
一个 PDE 只有控制方程还不够。为了得到唯一可计算的解,必须指定初始条件和边界条件。
5.1 Dirichlet 边界条件
Dirichlet 条件直接指定未知量的值:
例如:固定端位移为零、边界温度为常数、孔压边界给定压力值。
5.2 Neumann 边界条件
Neumann 条件指定导数、通量或力:
例如:给定热流密度、给定表面力、给定渗流通量。
5.3 Robin 边界条件
Robin 条件是变量值和通量的组合:
例如对流换热边界:
BoundaryCondition 不应该只是一个函数句柄。它至少要知道作用在哪个边界集合、作用于哪个变量、条件类型、数值表达式、是否随时间变化,以及如何进入离散系统。
6. 残差形式:通用计算核心入口
对通用物理场软件来说,最有价值的统一形式是残差形式。所谓残差,就是“当前猜测解代入控制方程后还差多少”。真正的解应该让残差为零。
其中 $u$ 是未知变量场,$p$ 是材料参数、几何参数、边界参数等。残差可以来自强形式、弱形式、有限体积通量平衡,也可以来自粒子方法中的离散动量方程。
6.1 从微分方程到残差
例如一维稳态 Poisson 方程:
可以写成:
当 $u$ 不是精确解时,$\mathcal{R}(u)$ 不为零。数值方法的任务就是构造一个有限维近似 $u_h$,使离散残差尽可能为零。
6.2 离散残差
离散化之后,未知函数变成有限个自由度组成的向量:
连续残差变成代数残差:
如果问题是线性的,常常得到:
也可以写成残差形式:
6.3 非线性问题与 Newton 迭代
对于非线性问题,残差依赖于当前解。Newton 方法的基本形式是:
其中:
7. 软件抽象映射
把理论概念映射到软件对象,是你开发通用物理场基座时最应该持续训练的能力。
| 理论概念 | 软件对象 | 职责 |
|---|---|---|
| 计算区域 $\Omega$ | Domain / Mesh | 描述几何、网格、区域标记、边界标记。 |
| 变量场 $u(x,t)$ | Field | 管理变量名、分量数、自由度、当前值、历史值。 |
| 材料参数 $p$ | MaterialModel | 提供本构参数、状态变量、通量或应力响应。 |
| 控制方程 | Equation | 定义强形式、弱形式或离散残差。 |
| 边界条件 | BoundaryCondition | 指定变量值、通量、力、换热、接触等条件。 |
| 残差 $R(U)$ | ResidualEvaluator | 在当前状态下计算系统不平衡量。 |
| Jacobian $J$ | JacobianAssembler | 构造或近似残差对未知量的导数。 |
| 线性/非线性求解 | Solver | 求解线性系统、非线性系统或时间步。 |
| 时间演化 | TimeStepper | 管理时间步长、历史变量、显式/隐式更新。 |
7.1 一个抽象接口草图
// Conceptual pseudo-code, not tied to a specific language
Problem
Domain domain
Field[] fields
MaterialModel[] materials
Equation[] equations
BoundaryCondition[] boundaryConditions
TimeStepper timeStepper
Solver solver
Equation
defineUnknownFields()
evaluateResidual(state)
evaluateJacobian(state) // optional or approximate
Solver
solve(R(U) = 0)
checkConvergence(norm(R), norm(dU))
Field、Equation、Residual、BoundaryCondition,就暂时不应该进入正式核心,而应该先进入 LearningLab 做最小算例。
8. 最小例子:一维瞬态热传导
现在用一个最小问题把本节概念串起来。考虑长度为 $L$ 的一维杆,温度为 $T(x,t)$,材料密度 $\rho$、比热 $c$、导热系数 $k$。
8.1 变量场
未知量是温度场 $T(x,t)$。
8.2 控制方程
8.3 初始条件
8.4 边界条件
例如左端给定温度,右端绝热:
8.5 残差形式
8.6 软件对象映射
| 对象 | 本例内容 |
|---|---|
Domain | 一维区间 $[0,L]$ |
Field | 温度场 T,标量,自由度位于节点或单元中心 |
MaterialModel | $\rho, c, k$ |
Equation | 热传导方程 |
BoundaryCondition | 左端 Dirichlet,右端 Neumann |
ResidualEvaluator | 计算热不平衡残差 |
TimeStepper | 显式 Euler、隐式 Euler 或 Crank-Nicolson |
Solver | 显式更新或隐式线性系统求解 |
9. 练习与验收
9.1 概念练习
- 对于稳态渗流方程 $-\nabla\cdot(K\nabla h)=q$,指出变量场、材料参数、源项和残差表达。
- 对于静力弹性方程 $\nabla\cdot\boldsymbol{\sigma}+\boldsymbol{b}=0$,指出未知场是什么,边界条件通常有哪些。
- 解释 Dirichlet 条件和 Neumann 条件在热传导、弹性力学、渗流中的对应物理意义。
- 判断下列问题更接近椭圆型、抛物型还是双曲型:稳态热传导、瞬态扩散、弹性波传播。
9.2 工程练习
在你的项目中新增一个理论债务条目:
# THEORY_DEBT.md
## TD-001: Unified PDE residual form
- Related module: core equation/residual abstraction
- Current understanding: need to connect physical PDEs to residual evaluators
- Need to learn:
- field definition
- conservation law
- boundary condition types
- residual form R(U)=0
- Verification task:
- implement 1D heat equation minimal solver
- compare with an analytical or reference solution
- Priority: High
9.3 本节验收清单
- 看到一个物理问题时,能先找未知变量场,而不是先写代码。
- 能把守恒律写成“积累项 + 通量散度 = 源项”。
- 能区分 Dirichlet、Neumann、Robin 边界条件。
- 能把强形式 PDE 改写成残差形式。
- 能解释为什么 $\boldsymbol{R}(\boldsymbol{U})=0$ 是通用数值求解入口。
- 能说出理论概念在软件对象中的对应关系。
本节总结
本节建立了通用物理场软件最重要的第一层认识:物理问题不是直接进入代码,而是先表达为变量场满足的控制方程,再被转化为残差方程,最后通过离散和求解器使残差趋近于零。
下一节建议进入:弱形式与有限元基本思想。它会解释为什么要乘测试函数、为什么要分部积分、自然边界条件如何自动进入方程,以及刚度矩阵从哪里来。