1.2.2 通用的标量输运方程|1.2.3 控制方程的分类(OpenFOAM理论笔记系列)

1.2.2 通用的标量输运方程

1.2.1节涉及的动量方程和能量方程都可以整理为如下的标准的标量输运方程:
∂ ( ρ ϕ ) ∂ t + ∇ ⋅ ( ρ ϕ u ⃗ ) = ∇ ⋅ ( Γ ∇ ϕ ) + S ϕ (1.16) \frac{\partial(\rho\phi)}{\partial t}+\nabla\cdot(\rho\phi\vec u)=\nabla\cdot(\Gamma\nabla\phi)+S_\phi \tag{1.16} t(ρϕ)+(ρϕu )=(Γϕ)+Sϕ(1.16)
式(1.16)从左至右依次是表示控制体内标量 ϕ \phi ϕ净增加率的瞬态项 ∂ ( ρ ϕ ) ∂ t \frac{\partial(\rho\phi)}{\partial t} t(ρϕ),表示 ϕ \phi ϕ随流体流出的净流出率的对流项 ∇ ⋅ ( ρ ϕ u ⃗ ) \nabla\cdot(\rho\phi\vec u) (ρϕu ),表示由于扩散作用扩散至控制体内的净扩散率的扩散项 ∇ ⋅ ( Γ ∇ ϕ ) \nabla\cdot(\Gamma\nabla\phi) (Γϕ)以及表示其他作用的源项 S ϕ S_\phi Sϕ
式(1.16)又可称为含源的瞬态的对流扩散方程,其是一类描述标量输运的最普遍的方程,对于一个矢量(如速度),其在各个方向上的分量也可以使用该方程进行描述。在有限体积法中,对于各式各样复杂物理场控制方程的求解都可以在最终转化为对相应对流扩散方程的求解。甚至可以这么说,一套优秀的有限体积法程序就是一个优秀的对流扩散方程求解程序。

1.2.3 控制方程的分类

上一节中我们介绍了通用的标量输运方程,我们也指出绝大多数的控制方程最终都可以整理为标量输运方程的形式。虽然其可以整理为相同的形式,但各个控制方程之间却可能存在着不同的数学特征。通常,我们依据偏微分方程的数学特征可以对控制方程进行如下的分类:

椭圆方程:
椭圆方程的原型是稳态的扩散方程:
∇ ⋅ ( Γ ∇ ϕ ) = 0 (1.17) \nabla\cdot(\Gamma\nabla\phi)=0 \tag{1.17} (Γϕ)=0(1.17)
由于式(1.17)在二维情况下可以看做一个椭圆的方程,因此得名为椭圆方程。在实际的物理现象中,固体中的稳态温度分布以及固体在给定载荷下的应力分布都是由椭圆方程控制的。

椭圆方程的一个重要特点是计算域内部一点的扰动会在整个计算域内引起变化,扰动将从扰动源出发传遍整个计算域(例如向一根小铁根中心突然进行加热,温度的变化会传播到整个小铁棍上)。因此,用椭圆方程描述的问题的解总是光滑的,即使边界条件是不连续的,其解也是光滑的。这对于数值计算来说是一个相当大的好消息——处理光滑问题总比处理间断问题容易得多。但需要注意的是,为了保证扰动可以向各个方向传播,求解椭圆问题的数值技术必须保证每个计算点的数据受到所有相邻点的影响。

抛物型方程
抛物型方程的原型是瞬态的扩散方程:
∂ ϕ ∂ t = ∇ ⋅ ( Γ ∇ ϕ ) (1.18) \frac{\partial \phi}{\partial t}=\nabla\cdot(\Gamma\nabla\phi) \tag{1.18} tϕ=(Γϕ)(1.18)
由抛物型方程控制的一个典型的物理问题是非稳态的温度传导问题例如将一根烧红的铁棍置于空气中进行冷却。该类问题的特点是,在t时刻发生的扰动只能影响到t时间步以后的物理量分布,解在时间上向前移动,在空间中则保持扩散。扩散效应的出现,保证了即使初始条件包含不连续点,解也能够在t>0后保持平滑。当t足够大时系统变为稳态,方程退化为椭圆方程。

双曲型方程
双曲型方程的原型是波动方程:
∂ 2 ϕ ∂ t 2 = c 2 ∇ 2 ϕ (1.19) \frac{\partial^2 \phi}{\partial t^2}=c^2\nabla^2\phi \tag{1.19} t22ϕ=c22ϕ(1.19)
式1.19的解是一个标准的正弦波系统。双曲型方程的一个重要特点是扰动的有限传播性,例如,对于一维的波动方程,位于 ( x , t ) (x,t) (x,t)处的值只受到 ( x − c t , 0 ) (x-ct,0) (xct,0) ( x + c t , 0 ) (x+ct,0) (x+ct,0)之间值的影响。这一特性也决定了双曲方程的解不一定是光滑连续的。

  • 图1.3 双曲方程的有限传播特性1
    图1.3 双曲方程的有限传播特性此时我们不妨回顾一下椭圆型方程和抛物型方程的特点,对于椭圆型方程, x x x处的值受到周围所有点的影响;对于抛物型方程, ( x , t ) (x,t) (x,t)处的值受到当前时间步之前所有点的影响,而对于双曲型方程,一个点的值则由时间上游的一部分点决定,这个点同时又将影响时间下游一部分的点。这是他们之间的重要区别。

  • 图1.4 三类方程的区别2(a. 双曲型方程 b. 抛物型方程 c. 椭圆方程)
    图1.4 三类方程的区别(a.双曲型方程  b. 抛物型方程 c. 椭圆方程)")一般而言,对于流动的控制方程动量方程,我们可以进行如下的大致分类:

  • 表1.1 动量方程的分类3

稳态流动瞬态流动
无粘流动椭圆型抛物型
粘性流动 M a < 1 Ma<1 Ma<1时椭圆型 M a > 1 Ma>1 Ma>1时双曲型双曲型
薄剪切层流动抛物型抛物型

关于偏微分方程分类的更详细内容可以参考相关文献4

系列说明:
接触有限体积法有一段时间了,也看了一些资料,但是有时候总觉得看过一遍之后什么也记不住。老话说得好,眼过千遍不如手过一遍,久而久之我就有了写一些比较像样子的笔记的想法。初学的时候曾经写过一本叫“OpenFOAM编程笔记:单相不可压缩流动”的册子,但当时基础太差(现在基础也不好),错误太多,倒不如推倒重来。
本系列将持续更新,欢迎各位挑错交流,挑错交流可以直接留言也可以联系邮箱cloudbird7@foxmail.com。等到预定内容全部写完后我将集结所有内容为一个独立的文件,开放下载。


  1. Versteeg H K , Malalasekera W . An Introduction to Computational Fluid Dynamic: The Finite Volume Method Second edition [M]. Edinburgh Gate:Pearson Education, 2007. Figure 2.9. ↩︎

  2. Versteeg H K , Malalasekera W . An Introduction to Computational Fluid Dynamic: The Finite Volume Method Second edition [M]. Edinburgh Gate:Pearson Education, 2007. Figure 2.10. ↩︎

  3. Versteeg H K , Malalasekera W . An Introduction to Computational Fluid Dynamic: The Finite Volume Method Second edition [M]. Edinburgh Gate:Pearson Education, 2007. Table 2.4. ↩︎

  4. Versteeg H K , Malalasekera W . An Introduction to Computational Fluid Dynamic: The Finite Volume Method Second edition [M]. Edinburgh Gate:Pearson Education, 2007. 26-34. ↩︎

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
OpenFOAM中,要在Navier-Stokes方程中添加一个新的标量变量F,需要进行以下步骤: 1. 在/src/transportModels/incompressible/的文件夹下创建一个名为F的文件夹。 2. 在F文件夹中创建一个名为F.H的头文件,并在其中定义F的场类型,例如: ``` #ifndef F_H #define F_H #include "fvCFD.H" namespace Foam { // Define the scalar field for F volScalarField F("F"); // Declare the transport model for F volScalarField Fp = fvc::interpolate(F); // Declare the diffusion coefficient for F volScalarField Df("Df", Fp.dimensions(), dimensionedScalar(“Df”, dimensionSet(1,-1,0,0,0,0,0), 0.1)); // Declare the source term for F volScalarField Sf("Sf", Fp.dimensions(), dimensionedScalar(“Sf”, dimensionSet(1,-2,0,0,0,0,0), 0.0)); // Declare the Laplacian term for F volScalarField LapF = fvm::laplacian(Df, Fp); // Declare the total transport equation for F fvScalarMatrix FEqn ( fvm::div(phi, Fp) == fvc::div(Sf) - LapF ); } #endif ``` 3. 在F文件夹中创建一个名为F.C的源文件,并在其中定义F的物理模型,例如: ``` #include "F.H" namespace Foam { // Define the physical model for F volScalarField F::boundaryField() const { // Define boundary conditions for F return Foam::zero; } // Solve the transport equation for F void solveF(const fvMatrix<double>& UEqn, const fvMatrix<double>& pEqn) { FEqn.solve(); } } ``` 4. 在NS方程中添加F的相关项,例如: ``` #include "F.H" // Define the Navier-Stokes equations UEqn = fvm::ddt(U) + fvm::div(phi, U) - fvm::laplacian(nu, U) == -fvc::grad(p) + g; PEqn = fvm::laplacian(rho, p) == fvc::div(phi) - fvm::laplacian(nu, U); FEqn = fvm::ddt(F) + fvm::div(phi, F) == fvc::div(Sf) - fvm::laplacian(Df, F); // Solve the Navier-Stokes equations UEqn.solve(); PEqn.solve(); FEqn.solve(); ``` 这样就可以在OpenFOAM中成功地添加一个新的标量变量F,并将其纳入Navier-Stokes方程的求解中。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值