柯朗数(Courant number)研究
在数值计算过程中,对于计算结果的准确性和效率有很高的要求,但是这两者之间往往互相矛盾;而使用柯朗数可用于平衡两者。
1、柯朗数的定义:
C = sqrt(gh)*t/s
其中,t是时间步长,s是网格在水平方向的间距。
柯朗数的意义在于表示了在单位时间步长中,有多少个网格的信息发生了移动。经过正确的调整,可以更好地加速收敛和增强解的稳定性。
2、C语言实现柯朗数计算:
依据上述方程,在实际计算中采用C语言实现计算固液界面上的柯朗数,结果如下:
void localCourantNumber()
{ double rhoe,rhon,rhot; for(i=;i<=nxm-;i++) //Calculation of local Courant number only at internal faces
{
ieast = i + ;
dxpe = xc[ieast] - xc[i];
fxe = (xf[i]-xc[i])/dxpe;
fxp = 1.0 - fxe; for(j=;j<=nym;j++)
{
jnorth = j + ;
dypn = yc[jnorth] - yc[j];
fyn = (yf[j] - yc[j])/dypn;
fyp = 1.0 - fyn; for(k=;k<=nzm;k++)
{
ktop = k + ;
dzpt = zc[ktop]-zc[k];
fzt = (zf[k] - zc[k])/dzpt;
fzp = 1.0 - fzt; //Calculating density at cell interface
rhoe = fxp * rho[i][j][k] + fxe * rho[ieast][j][k]; /* rhoe = 2.0 * rho[i][j][k] * rho[ieast][j][k]/( rho[i][j][k] + rho[ieast][j][k]);*/ s = (yf[j]-yf[j-])*(zf[k]-zf[k-]);
vole = dxpe * s; //Sum of courant numbers of outflow faces of donor cell
Ce[i][j][k] = fabs(Fe[i][j][k]/(rhoe*vole))*dt; /* printf("Ce=%e\n",Ce[i][j][k]);*/
}
}
} for(i=;i<=nxm;i++) //Calculation of local Courant number only at internal faces
{
ieast = i + ;
dxpe = xc[ieast] - xc[i];
fxe = (xf[i]-xc[i])/dxpe;
fxp = 1.0 - fxe; for(j=;j<=nym-;j++)
{
jnorth = j + ;
dypn = yc[jnorth] - yc[j];
fyn = (yf[j] - yc[j])/dypn;
fyp = 1.0 - fyn; for(k=;k<=nzm;k++)
{
ktop = k + ;
dzpt = zc[ktop]-zc[k];
fzt = (zf[k] - zc[k])/dzpt;
fzp = 1.0 - fzt; //Calculating density at cell interface
rhon = fyp * rho[i][j][k] + fyn * rho[i][jnorth][k]; /* rhon = 2.0 * rho[i][j][k] * rho[i][jnorth][k]/( rho[i][j][k] + rho[i][jnorth][k]);*/ s = (xf[i]-xf[i-])*(zf[k]-zf[k-]);
voln = s * dypn; //Sum of courant numbers of outflow faces of donor cell
Cn[i][j][k] = fabs(Fn[i][j][k]/(rhon*voln))*dt; /* printf("Ce=%e\n",Ce[i][j][k]);*/
}
}
} for(i=;i<=nxm;i++) //Calculation of local Courant number only at internal faces
{
ieast = i + ;
dxpe = xc[ieast] - xc[i];
fxe = (xf[i]-xc[i])/dxpe;
fxp = 1.0 - fxe; for(j=;j<=nym;j++)
{
jnorth = j + ;
dypn = yc[jnorth] - yc[j];
fyn = (yf[j] - yc[j])/dypn;
fyp = 1.0 - fyn; for(k=;k<=nzm-;k++)
{
ktop = k + ;
dzpt = zc[ktop]-zc[k];
fzt = (zf[k] - zc[k])/dzpt;
fzp = 1.0 - fzt; //Calculating density at cell interface
rhot = fzp * rho[i][j][k] + fzt * rho[i][j][ktop]; /* rhot = 2.0 * rho[i][j][k] * rho[i][j][ktop]/( rho[i][j][k] + rho[i][j][ktop]);*/ s = (xf[i]-xf[i-])*(yf[j]-yf[j-]);
volt = s * dzpt; //Sum of courant numbers of outflow faces of donor cell
Ct[i][j][k] = fabs(Ft[i][j][k]/(rhot*volt))*dt; /* printf("Ce=%e\n",Ce[i][j][k]);*/
}
}
} for(i=;i<=nxm;i++) //Calculation of local Courant number only at internal faces
{ for(j=;j<=nym;j++)
{ for(k=;k<=nzm;k++)
{ COutD[i][j][k] = Ce[i][j][k] + Cn[i][j][k] + Ct[i][j][k];
/* printf("COutD=%lf\n",COutD[i][j][k]);*/
/* printf("Ce=%e\n",Ce[i][j][k]);*/
/* printf("Cn=%e\n",Cn[i][j][k]);*/
/* printf("Ct=%e\n",Ct[i][j][k]);*/
}
}
} }
3、柯朗数使用的注意事项:
在fluent中,用courant number 来调节计算的稳定性与收敛性。一般来说,随着courantnumber 的从小到大的变化,收敛速度逐渐加快,但是稳定性逐渐降低。所以具体的问题,在计算的过程中,最好是把Courant number 从小开始设置,看看迭代残差的收敛情况,如果收敛速度较慢而且比较稳定的话,可以适当的增加courant number 的大小,根据自己具体的问题,找出一个比较合适的courant number,让收敛速度能够足够的快,而且能够保持它的稳定性。
Generally, in the explicit schemes of differential method, Courant number is an important number which should be less than 1 in order to assure the stability. However, if the Courant number is too small, much computation time will be lost. So the Courant number could be one of those important parameters affecting computation cost and stability. we could use Courant number to control the time step in the transient simulation in CFD codes. Here is some configuration parameters which could be used in simulation with OpenFOAM。
柯朗数(Courant number)研究的更多相关文章
- CFD计算
47 求解器为flunet5/6在设置边界条件时,specify boundary types下的types中有三项关于interior,interface,internal设置,在什么情况下设置相应 ...
- Fluent经典问题答疑
原文链接1 原文链接28 什么叫边界条件?有何物理意义?它与初始条件有什么关系? 边界条件与初始条件是控制方程有确定解的前提. 边界条件是在求解区域的边界上所求解的变量或其导数随时间和地点的变化规律. ...
- Coupled和segregated【转载】
转载自:http://blog.sina.com.cn/s/blog_67873f6c0100ltq6.html 问题1: 我看中文帮组里说是'分离'的意思?我绝对翻译不太好,请问有更好的翻译吗? 和 ...
- Fluent 时间步长【转载】
转载自:http://blog.sina.com.cn/s/blog_4ada3be301011rjp.html 用FLUENT计算非稳态问题,是不是在计算时必须保证在每个时间步timestep里都要 ...
- JavaScript Math和Number对象研究
1. Math 对象 1.1 介绍 Math 对象,是数学对象,提供对数据的数学计算,如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法. 1.2 构造函数 无 : ...
- 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...
- Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
前提:先研究javascript中的变量有几种,参考: http://www.w3school.com.cn/js/js_datatypes.asp http://glzaction.iteye.co ...
- Nagios学习实践系列——配置研究[监控当前服务器]
其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...
- AP(affinity propagation)研究
待补充…… AP算法,即Affinity propagation,是Brendan J. Frey* 和Delbert Dueck于2007年在science上提出的一种算法(文章链接,维基百科) 现 ...
随机推荐
- mybatis 中sql语句传递多个参数
Available parameters are [2, 1, 0, param1, param2, param3] <select id="loginByTeacher" ...
- kafka单节点测试
======================命令====================== 启动zookeeper server bin/zookeeper-server-start.sh conf ...
- [redis] Node is not empty. Either the node already knows other nodes
Connecting to node 172.168.63.202:7001: OK [ERR] Node 172.168.63.202:7001 is not empty. Either the n ...
- UIWebView的使用
iOS中UIWebView的使用详解 一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种 ...
- mybatis实战教程(mybatis in action)之五:与spring3集成
在这一系列文章中,前面讲到纯粹用mybatis 连接数据库,然后 进行增删改查,以及多表联合查询的的例子,但实际项目中,通常会用 spring 这个沾合剂来管理 datasource 等.充分利用sp ...
- Oauth2.0认证---授权码模式
目录: 1.功能描述 2.客户端的授权模式 3.授权模式认证流程 4.代码实现 1.功能描述 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(au ...
- codeforces 练习
codeforces 627 D. Preorder Test 二分 + 树dp 做logn次树dp codeforces 578D.LCS Again 给出一个字符串str,长度n<=10^6 ...
- Webview获取H5页面js方法参数
#import<JavaScriptCore/JavaScriptCore.h> #pragma mark UIWebViewDelegate - (void)webViewDidFini ...
- Python基础篇【第6篇】: Python模块subprocess
subprocess Python中可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen* --废弃 popen2.* ...
- Beaglebone Black从零开始系列教程大汇总!
谁都有做菜鸟的时候,菜鸟不可怕,怕的是没有人指引前进的方向!本系列文章将逐个阐述BBB各个功能模块的基本使用方法.现在中文的BBB资料太少,它们是本人从全世界互联网的各个角落收集.学习.亲自测试得到的 ...