计算不可压缩流体--差分格式的两个问题
2014-03-20 00:04
393 查看
一 Cell - Re 问题
举例, 稳态BURGER'S 方程 u du/ dx = miu * d^2 u/ d x^2 , 中心差分离散 Re(u(i + 1) - u(i) )/ 2 - ( u(i - 1) - 2 u(i) + u(i+1) ) = 0
定义单元雷诺数, Re = U * h/ miu, % h 网格尺寸
问题描述: Re > 2, 连续单元解出现不连续跳跃。即数值解在单元节点之间出现非物理震荡。而且一般而言,震荡幅值随解的幅值增大而增大。
问题原因: 椭圆,抛物型PDE有个最值原理,即满足方程的极值解往往出现在单元域边界上,单元内的解约束于极大值与极小值之间。保证该条条件成立,要求微分算子 L满足 如下条件:
L u = a0 * u(i) - (a_-1 * u(i-1) + a_+1 * u (i+1) )
其中 a0 > 0, a_ -1 , a_+1 非负; 且 a0 不小于 ( a_-1 + a_+1)
故显然当Re > 2 ( 如下), 该条件破坏,导致单元内解约束上下界失效,出现震荡。
-( 1 + Re/2) * u(i-1) + 2 * u(i) - ( 1- Re/2) * u(i+1) = 0
解决办法: 物理意义上讲,cell Re 问题出现,主要是不正确地使用了未来信息。 假设流动信息沿x正方向传播到单前节点 i, 显然已知上一节点 u(i-1),但未知 下一节点 u(i+1),中心差分等权考虑前后两个节点的物理量,就造成了问题。解决办法一,对于中心差分格式调整h,使其满足最值原理。但这样往往要求非常精细的网格; 解决办法二,采用迎风格式,常用; 解决办法三, 来自压缩流间断波处理方法,ENO (essentially non oscillatory) 等格式。 偶数阶格式实际上是引入数值耗散平滑解。
常用的迎风格式包括一阶,二阶以及QUICKG格式。
二 Aliasing 问题
原因: 前文讲过,Hilbert空间PDE求解通过截断Fourier级数的前面若干项(有限项),形成Fourier多项式,求解该多项式系数,再带回原级数,即得到原PDE的数值近似解。对于合适的数值算法,其Fourier多项式与Fourier级数曲线光滑逼近,那么高波数的Fourier系数能迅速凋亡;反之,不合适的算法,其Fourier多项式不怎么光滑,高波数系数对应的幅值较大,产生问题。另外,对于非线性问题,它会自发产生高波数大幅值,想想非线性系统演化成chaos的过程,绝对初值无关的自发性。
解决: 数值平滑。一方面类似问题一,采用数值耗散项模糊高波数影响;二采用滤波函数, 关于滤波函数,作用原理与信号处理中的一样,整个Fourier误差分析都绝对是从信号处理过来的,所以,还是翻翻书吧。
举例, 稳态BURGER'S 方程 u du/ dx = miu * d^2 u/ d x^2 , 中心差分离散 Re(u(i + 1) - u(i) )/ 2 - ( u(i - 1) - 2 u(i) + u(i+1) ) = 0
定义单元雷诺数, Re = U * h/ miu, % h 网格尺寸
问题描述: Re > 2, 连续单元解出现不连续跳跃。即数值解在单元节点之间出现非物理震荡。而且一般而言,震荡幅值随解的幅值增大而增大。
问题原因: 椭圆,抛物型PDE有个最值原理,即满足方程的极值解往往出现在单元域边界上,单元内的解约束于极大值与极小值之间。保证该条条件成立,要求微分算子 L满足 如下条件:
L u = a0 * u(i) - (a_-1 * u(i-1) + a_+1 * u (i+1) )
其中 a0 > 0, a_ -1 , a_+1 非负; 且 a0 不小于 ( a_-1 + a_+1)
故显然当Re > 2 ( 如下), 该条件破坏,导致单元内解约束上下界失效,出现震荡。
-( 1 + Re/2) * u(i-1) + 2 * u(i) - ( 1- Re/2) * u(i+1) = 0
解决办法: 物理意义上讲,cell Re 问题出现,主要是不正确地使用了未来信息。 假设流动信息沿x正方向传播到单前节点 i, 显然已知上一节点 u(i-1),但未知 下一节点 u(i+1),中心差分等权考虑前后两个节点的物理量,就造成了问题。解决办法一,对于中心差分格式调整h,使其满足最值原理。但这样往往要求非常精细的网格; 解决办法二,采用迎风格式,常用; 解决办法三, 来自压缩流间断波处理方法,ENO (essentially non oscillatory) 等格式。 偶数阶格式实际上是引入数值耗散平滑解。
常用的迎风格式包括一阶,二阶以及QUICKG格式。
二 Aliasing 问题
原因: 前文讲过,Hilbert空间PDE求解通过截断Fourier级数的前面若干项(有限项),形成Fourier多项式,求解该多项式系数,再带回原级数,即得到原PDE的数值近似解。对于合适的数值算法,其Fourier多项式与Fourier级数曲线光滑逼近,那么高波数的Fourier系数能迅速凋亡;反之,不合适的算法,其Fourier多项式不怎么光滑,高波数系数对应的幅值较大,产生问题。另外,对于非线性问题,它会自发产生高波数大幅值,想想非线性系统演化成chaos的过程,绝对初值无关的自发性。
解决: 数值平滑。一方面类似问题一,采用数值耗散项模糊高波数影响;二采用滤波函数, 关于滤波函数,作用原理与信号处理中的一样,整个Fourier误差分析都绝对是从信号处理过来的,所以,还是翻翻书吧。
相关文章推荐
- 计算不可压缩流体 -- 差分/有限体积离散格式
- 计算不可压缩流体 -- 数学基础
- 计算不可压缩流体- NS方程求解算法
- 使用VS进行打包程序解决生成两个文件的问题(压缩后只有一个exe)
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- PHP中计算两个日期之差的问题
- 问题:C#时间差;结果:C# 使用TimeSpan计算两个时间差
- iOS 计算两个日期之间的天数问题
- [物理学与PDEs]第2章习题8 一维定常粘性不可压缩流体的求解
- leetcode-2 Add Two Numbers 计算两个对应的列表和问题
- mysql数据库计算两个经纬度之间的距离问题
- Network Saboteur 简单dfs(), 计算怎样分两个集合 最优问题 用flag[] 数组标记
- 9.在数学计算或数字分析中,经常会用到计算两个数的最大公约数的问题。即:输入两个正整数,当两个数字有一个不是正整数时会产生异常。当输入非整数数字时,也产生异常。输入无错误后,可计算两个数的最大公约数。
- leetcode-2 Add Two Numbers 计算链表两个对应和的问题
- java的ZipOutputStream压缩文件的两个问题(乱码和每次zip后文件md5变化)
- 计算两个日期的天数问题
- 计算任意两个日期之间的天数问题
- 云计算之路-阿里云上:实战Advanced Logging for IIS分析http内容压缩问题
- 关于计算两个时间间隔问题
- 蓝桥杯 日历问题 计算两个日期的时间差