CFD计算过程发散诸多原因分析【转载】
转载自:
http://blog.sina.com.cn/s/blog_5fdfa7e601010rkx.html
今天探讨引起CFD计算过程中发散的一些原因。cfd计算是将描述物理问题的偏微分方程转化为代数方程组求解,从而得到离散空间上指定点上的值,而其他位置的值通过插值来完成。这本质是将非线性方程线性化并求解的过程,我是这样理解的,对于物理问题真解随时间的变化是一条曲线,而求解过程中不断的求解曲线的斜率,并实现时间的上的步进(可以理解为1阶导数)。如果在指定的时间步长内斜率变化很小,这种步进是可以满足方程要求的,并可以得到将来任意时刻的近似解。然而,如果变化比较大时,实际的变化过程将不能通过线性化方法来处理,这时候再使用这种方法就会出现问题。随着时间的推移,数值解越来越偏离真解,最终引起发散。对于我们求解的流动问题,有下面几种可能会引起计算过程的发散
1)时间步长过大
这点很容易理解,时间步长过长可能会造成时间段内,斜率变化较大,从而会造成数值解偏离真解。一般而言,对于显式方法要求在指定的时间步长内流体流动不能超过一个网格(库朗数限制)。
2)压力修正次数太少
对于NS方程SIMPLE系列算法而言,需要通过压力来显式修正表面流率和速度,如果修正次数过少,通常会造成修正后的速度和真实速度偏离较大,下一时间步求解速度的时候会得到一个不真实的表面流率,从而影响下一个时刻的速度求解,进而影响压力,长期计算会影响造成误差积累设置发散。因此,压力修正次数要有一定的限制。一般而言对于2d问题,2~3次能够满足要求,而对于3d问题3~4次应该可以,但也和具体问题有关系,同一个问题3d的比2d的要求修正次数多。
3)非正交修正
在网格正交性比较差的情况下,直接利用正交网格导出的扩散项离散过程通常会引起误差,通常将离散过程分为正交和非正交两部分,正交部分隐式处理,非正交部分显示处理。非正交中压力值采用了上一层迭代的值,因此会影响收敛性。当网格质量较差时,可以指定一定量的非正交循环,不需要太多3次以内即可。
4)负扩散系数
扩散过程描述的是从物理量从高浓度向低浓度的传输过程,负扩散系数会造成低浓度向高浓度的传输,这和实际物理现象不符的,长期模拟下去会造成局部浓度过度增加,从而造成发散。引起负扩散系数原因很多,比如湍流模型求出来的湍流粘性为负值,或者你误将扩散项前面的-写成了+。
5)不适当的边界条件
边界条件不合理也会引起方程的发散,比如开口系统只有进口没有出口。对于不可压缩流而言,边界条件的设置方法见前面博文。需要指出的时,湍流k-e模型中入口通常需要根据经验关系式指定,而并非随意给值,这常常是初学者常见的问题。
6)不合适的代数方程求解器
对于一些问题,离散后的代数方程需要采用一些性能优越的代数方程求解器。特别是对于3d问题,网格单元数越多对代数方程求解器要求越高,如果采用传统的pcg(pbicg)+传统预条件有时候在指定的迭代步内(openfoam默认1001)很难收敛到你指定的精度。这时,可以选用GAMG或者pcg+GAMG等代数求解器,以确保较少时间步收敛到指定解。
7)过大的源项
源项过大是引起方程发散的一个重要原因,当自己写程序或者做耦合计算的时候,不妨检查一下你的源项。
8)对流项离散
对流项的离散格式对收敛性的影响很多cfd的书上都有介绍。 一般而言低阶格式较稳定,高阶稳定性则较差。
9)不合适的初始场
对于cfd计算初始场往往设置具有较大的随意性,特别是对于稳态问题更是如此。如果设置的初值偏离真实物理量太远会造成一开始就发散。对于稳态问题,可以采用势流的求解结果作为初始场进行进一步迭代,这样会大大改善收敛性。
10)求解过程中物理量越界
有些求解的物理量通常是有界的,比如体积分率应该在[0 1]之间,而k 和 e 应当是大于0的数目,而在求解过程中由于离散方程植入不慎,会造成求解变量不在其物理范围之内,从而造成发散。因此对于有界量跟踪方程植入过程应特别注意。
上面仅仅是个人浅见,仅供参考。
CFD计算过程发散诸多原因分析【转载】的更多相关文章
- 一次接口压力测试qps极低原因分析及解决过程
一次接口压力测试qps极低原因分析及解决过程 9-2日在做内部的性能测试相关培训时,发现注册接口压力测试qps极低(20左右),这个性能指标远不能达到上线标准 ,经过一系列调试,最后定位 98%的时间 ...
- CFD计算
47 求解器为flunet5/6在设置边界条件时,specify boundary types下的types中有三项关于interior,interface,internal设置,在什么情况下设置相应 ...
- Nested Loops join时显示no join predicate原因分析以及解决办法
本文出处:http://www.cnblogs.com/wy123/p/6238844.html 最近遇到一个存储过程在某些特殊的情况下,效率极其低效, 至于底下到什么程度我现在都没有一个确切的数据, ...
- Beforeunload打点丢失原因分析及解决方案
淘宝的鱼相在 2012 年 8 月份发表了一篇文章,里面讲述了他们通过一个月的数据采集试验,得到的结果是:如果在浏览器的本页面刷新之前发送打点请求,各浏览器都有不同程度的点击丢失情况,具体点击丢失率统 ...
- Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
原文:Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析 前段时间,公司同事开发了一个小工具,在工具执行过程中,UI界面一直处于卡死状态. 通过阅读代码发现,主要是 ...
- SQL查询速度慢的原因分析和解决方案
SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建 ...
- 关于JVM内存溢出的原因分析及解决方案探讨
前言:JVM中除了程序计数器,其他的区域都有可能会发生内存溢出. 0.什么是内存溢出 当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出. 1. ...
- QuantLib 金融计算——案例之普通欧式期权分析
目录 QuantLib 金融计算--案例之普通欧式期权分析 概述 普通欧式期权公式法定价 1. 配置期权合约条款 2. 构建期权对象 3. 配置定价引擎 4. 计算 题外话:天数计算规则 Quote ...
- HBase丢失数据的故障和原因分析
hbase的稳定性是近期社区的重要关注点,毕竟稳定的系统才能被推广开来,这里有几次稳定性故障和大家分享. 第一次生产故障的现象及原因 现象: 1 hbase发现无法写入 2 通过hbc ...
随机推荐
- HTML5 结构标签
一.定义标题栏:header header 元素是一种具有引导和导航作用的结构元素,通常用来放置整个页面或页面内的一个内容区块的标题,但也可以包含其他内容,因此整个页面的标题应该放在页面的开头. he ...
- Vue props用法详解
Vue props用法详解 组件接受的选项之一 props 是 Vue 中非常重要的一个选项.父子组件的关系可以总结为: props down, events up 父组件通过 props 向下传递数 ...
- TCP_Wrappers基础知识介绍
1. TCP_Wrappers基础知识介绍 TCP_Wrappers是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件.它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...
- Java面向对象程序设计----接口
接口:接口是一套规范.一个比抽象类更抽象的类. 接口中只能写抽象方法.接口中没有构造函数接口中的变量:public Stratic final接口怎么来使用(implements)实现接口 接口语法: ...
- 数据库PDO简介
php简介,php历史,php后端工程师职业前景,php技术方向,php后端工程师职业体系介绍. php是世界上使用最广泛的web开发语言,是超文本预处理器,是一种通用的开源脚本语言,语法吸收了c语言 ...
- requests-html模块(下)
render方法 我们先理一下关系requests和的作者是同一个人,pyppeteer是nodejs中puppeteer的非官方实现 requests-html调用的pyppeteer与浏览器进行交 ...
- gitlab(7.9)升级到8.0.1
1.gitlab8.0更新说明 GitLab 8.0 现在完全集成了持续集成工具 (GitLab CI) ,此外还完全重写了 UI,节省了至少 50% 的磁盘空间.更快的合并,内置持续集成(CI)到 ...
- 使用Junit测试框架学习Java
前言 在日常的开发中,离不开单元测试,而且在学习Java时,特别是在测试不同API使用时要不停的写main方法,显得很繁琐,所以这里介绍使用Junit学习Java的方法.此外,我使用log4j将结果输 ...
- CM的私有仓库搭建
CM的私有仓库搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们有时候会因为网络不稳定的因素,导致安装某些服务直接失败.当安装包比较大的时候,我们就得考虑自建私有仓库 ...
- 安装k8s,使用root帐号的初始化脚本
现在稳定性差不多了.可以总结一下了. 真正使用时,有几个地方,还是确认一下,再正式运行吧. #!/bin/bash # Version V0. ---: ;fi K8S_VERSION="1 ...