FDS中稳定性条件和分析
FDS中稳定性条件和分析
标签: 数值稳定性,FDS, Pyrosim
前言
用差分格式求解初值问题的数值解时,截断误差并非是误差的唯一来源,每一步的计算都会引入舍入误差,在做逐时间层的计算时,这种误差还会逐层传播积累。如果误差在传播过程中变得越来越大,以致于淹没真解,格式就是不稳定的。而一个稳定的格式,其误差应该是保持一个有界的范围。如果学习过计算流体的话,我们都会通过误差的傅里叶分析方法和Hirt启示性方法等方法分析数值的稳定性。我们此次主要从物理的角度来分析不稳定性条件。在FDS中,时间格式上采用显示格式,因此需要通过调整时间步长来满足稳定性条件,接下来就分别看看是如何做的。
从物理上理解数值不稳定性
- CFL(Courant-Friedrichs-Lewy)不稳定定性约束
直接上表达式:
CFL≡δt∥U∥δX≤1CFL\equiv\delta t\frac{\|U\|}{\delta X}\leq1CFL≡δtδX∥U∥≤1,其中∥U∥\|U\|∥U∥表示的是速度的范数,而δ\deltaδ t表示的是时间步长,δX\delta XδX表示的是空间步长。
一眼看上去,不知所云,但是我们稍微调整一下就得到:
δt∥U∥≤δX\delta t\|U\|\leq \delta Xδt∥U∥≤δX
这不就是速度乘以时间小于距离么?那这个物理意义是什么呢?
意思就是在一个时间步长内,单元格上的速度产生的位移要小于网格的大小,也就是说我们的流体流动误差不能被单个控制体捕捉控制,这样数值不稳定性就可能发生了。
另外,在FDS中,∥U∥\|U\|∥U∥采取三种范数,分别是L1L_1L1、L2L_2L2、L∞L_\inftyL∞范数,即:
- L∞L_\inftyL∞范数: ∥U∥δX=max(uδx,vδy,wδz)\frac{\|U\|}{\delta X}=max(\frac{u}{\delta x},\frac{v}{\delta y},\frac{w}{\delta z})δX∥U∥=max(δxu,δyv,δzw) 在VLES算法中默认设置。
- L1L_1L1范数: ∥U∥δX=∣u∣δx+∣v∣δy+∣w∣δz\frac{\|U\|}{\delta X}=\frac{|u|}{\delta x}+\frac{|v|}{\delta y}+\frac{|w|}{\delta z}δX∥U∥=δx∣u∣+δy∣v∣+δz∣w∣ 在DNS和LES算法中默认设置。
- L2L_2L2范数: ∥U∥δX=(uδx)2+(vδy)2+(wδz)2\frac{\|U\|}{\delta X}=\sqrt{(\frac{u}{\delta x})^2+(\frac{v}{\delta y})^2+(\frac{w}{\delta z})^2}δX∥U∥=(δxu)2+(δyv)2+(δzw)2
除了默认的设置外,针对不同的问题,我们也可以主动设置不同的形式。例如,在VLES的算法下,强制使用L1L_1L1范数,那么在MISC中强制添加如下语句即可:
&MISC CFL_VELOCITY_NORM=1
- VN(Von Neumann Constraint)约束
直接上表达式:
VN≡δtmax[ν,Dα]∑1δxi2<12VN\equiv\delta t \max[\nu,D_\alpha]\sum\frac{1}{\delta x_i^2}<\frac{1}{2}VN≡δtmax[ν,Dα]∑δxi21<21,其中ν\nuν代表粘性系数,DαD_\alphaDα代表扩散系数。有了前面的经验之后,我们一眼就能看出其物理含义了:在单个时间步长内,扩散或者耗散的速率必须小于半个网格(如下图所示)。
在计算时,我们可以设置VN的取值范围(LES默认是0.8到1),但是不要太大,防止数值不稳定发生。设置方法如下:
&MISC VN_MIN=0.7,VN_MAX=0.9/这意味着我们把VN约束进一步加强到0.7-0.8的范围内
- 传热约束
先看表达式:
δt<(δx/2)(q˙c"/ρw)1/3\delta t<\frac{(\delta x/2)}{(\dot q_c^"/\rho_w)^{1/3}}δt<(q˙c"/ρw)1/3(δx/2)。这里q˙c"\dot q_c^"q˙c"表示热流,单位是W/m2W/m^2W/m2,ρw\rho_wρw代表墙壁处气相的密度。通过表达式,我们很明显看到式子右边的分母项乘以δt\delta tδt要小于12\frac{1}{2}21倍的网格尺度的大小。那么这个分母项代表什么呢?我们通过量纲上看是速度的量纲m/sm/sm/s,在看下物理意义,可以联想理解到:热量在单位质量中的传播速度。那么这就意味着热流的传播速度要小于半个网格。
OK,FDS中的三种防止数值不稳定性发生的方法就是上述的方法了,当发生不稳定性问题的时候我们就要分析到底是哪里出现问题了。FDS中的思路就是通过自动调节时间步长的方法,使得同时满足三个约束条件,这样就能在满足数值稳定的同时,把时间步长拉的足够长来加速我们的仿真时间。因此当发生数值不稳定的时候,我们就要思考:我们的时间步长满足三个约束条件么?我们的网格是不是过于细了导致时间步长不够短?…………
今天就分享到这里了,如有错误欢迎指出和交流讨论。本人研究兴趣:巷道火灾,高性能计算,机器学习。如有合作欢迎联系。如果你需要寻求合作者可以私信给我。
【往期文章】FDS中的’OPEN’边界条件
【尊重原创,转载请说明出处】
FDS中稳定性条件和分析相关推荐
- FDS学习笔记(二)设置时间空间条件,fds中网格(MESH)的设置
通常来说,在建立一个火灾模型时,首先要确定全局参数,即火灾蔓延的时间和空间.即仿真时间.计算域的大小和范围 一.HEAD 设置输入文件时要做的第一件事是给模拟起一个名字,HEAD就是用来设置改项内容的 ...
- 事业单位人力资源开发中的职业发展分析
事业单位人力资源开发中的职业发展分析 摘要:首先,从人才发展的概念.理论和公共事业单位的初始情况入手.从发展的角度分析了国有事业单位人才发展存在的问题和可能的原因.最后,提出完善事业单位人才培养措施, ...
- 难以想象SpringBoot中的条件注解底层居然是这样实现的
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...
- 面试:SpringBoot中的条件注解底层是如何实现的?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...
- java 递归原理_Java中递归原理实例分析
本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...
- 面试:Spring Boot 中的条件注解底层是如何实现的?
SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...
- arcgis 字段计算器 条件赋值_【教程】ArcGIS入门教程(11)——多条件购房分析...
一.实验目的 通过本次实验,理解矢量数据缓冲区分析和叠置分析的原理:掌握其相关分析工具的使用:并能够在相类似的问题中,使用相关工具进行问题的解决. 二.实验数据 城市市区交通网络图(network.s ...
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...
- AI框架中图层IR的分析
摘要:本文重点分析一下AI框架对IR有什么特殊的需求.业界有什么样的方案以及MindSpore的一些思考. 本文分享自华为云社区<MindSpore技术专栏 | AI框架中图层IR的分析> ...
最新文章
- PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
- 七自由度车辆稳定性数学模型和simulink求解
- 在SAP API hub自动生成使用ABAP调用API的胶水代码
- html生成xml文件,字符串xml生成xml文件
- html 圆球的百分比,HTML5 很酷的球形器皿中水波状的进度条
- 智能车复工日记【7】:关于会车的图像问题
- vue3 composition-api useRoute useRouter 别混淆
- php的socket,PHP Socket范例
- Docker入门教程
- HTTPS那些事(二)SSL证书
- CHM Editor V1.3.3.7(chm编辑、修改chm文件、chm编辑器)
- python实现isPrime()函数
- 程序员是如何买房的?
- matlab has encountered,matlab运行程序时出现“matlab has encountered an internal problem
- pimple学习:源码解读
- win7下安装myODBC和使用
- Mybatis源码分析--关联表查询及延迟加载原理(二)
- matlab中的rand函数(用于产生随机数)
- Python播放音乐的五种方法
- 数学建模培训作业(一)