在数值计算过程中,对于计算结果的准确性和效率有很高的要求,但是这两者之间往往互相矛盾;而使用柯朗数可用于平衡两者。

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)研究的更多相关文章

  1. CFD计算

    47 求解器为flunet5/6在设置边界条件时,specify boundary types下的types中有三项关于interior,interface,internal设置,在什么情况下设置相应 ...

  2. Fluent经典问题答疑

    原文链接1 原文链接28 什么叫边界条件?有何物理意义?它与初始条件有什么关系? 边界条件与初始条件是控制方程有确定解的前提. 边界条件是在求解区域的边界上所求解的变量或其导数随时间和地点的变化规律. ...

  3. Coupled和segregated【转载】

    转载自:http://blog.sina.com.cn/s/blog_67873f6c0100ltq6.html 问题1: 我看中文帮组里说是'分离'的意思?我绝对翻译不太好,请问有更好的翻译吗? 和 ...

  4. Fluent 时间步长【转载】

    转载自:http://blog.sina.com.cn/s/blog_4ada3be301011rjp.html 用FLUENT计算非稳态问题,是不是在计算时必须保证在每个时间步timestep里都要 ...

  5. JavaScript Math和Number对象研究

    1. Math 对象 1.1 介绍   Math 对象,是数学对象,提供对数据的数学计算,如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法.   1.2 构造函数   无 : ...

  6. 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)

    转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...

  7. Javascript判断object还是list/array的类型(包含javascript的数据类型研究)

    前提:先研究javascript中的变量有几种,参考: http://www.w3school.com.cn/js/js_datatypes.asp http://glzaction.iteye.co ...

  8. Nagios学习实践系列——配置研究[监控当前服务器]

    其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...

  9. AP(affinity propagation)研究

    待补充…… AP算法,即Affinity propagation,是Brendan J. Frey* 和Delbert Dueck于2007年在science上提出的一种算法(文章链接,维基百科) 现 ...

随机推荐

  1. Entity Framework 连接低版本数据库

    使用EF6连接SQL2012生成的Edmx,分页时生成的查询语句使用了SQL 2012引入的新特性  OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY,结果在生产环境使用的数 ...

  2. VR内容定制请找北京动软VR团队,长年承接VR/AR应用、游戏内容定制

    最近这一拔VR及AR浪潮得到业界的热捧,与2015年年底到2016年年初乐相.蚁视.睿悦.焰火工坊等VR创业公司,陆续发布融资的信息不无关系.业界也有统计数据称,约90%的VR投资案例,发生在2015 ...

  3. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  4. SVN代码回滚命令之---"svn up ./ -r 版本号"---OK

    一.改动还没被提交的情况(未commit) 这种情况下,见有的人的做法是删除work copy中文件,然后重新update,恩,这种做法达到了目的,但不优雅,因为这种事没必要麻烦服务端. 其实一个命令 ...

  5. Spring MVC4 纯注解配置教程

    阅读本文需要又一定的sping基础,最起码要成功的运行过一个SpringMvc项目. 在传统的Spring项目中,我们要写一堆的XML文件.而这些XML文件格式要求又很严格,很不便于开发.而网上所谓的 ...

  6. 一个github账户多台电脑代码提交

    在实际工作生活中,我们可能不一定仅仅在一台电脑上编码,比如:我们平时在单位电脑1上写代码,提交代码到github账户,而我们也可能会在在家里的电脑2上继续工作,提交代码,这样就是在不同的电脑上提交代码 ...

  7. BFS与DFS

    DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测. 类似于树的先根遍历深搜例子:走迷宫,你没有办法用分身术来站在每个走过的位置.不撞南山不 ...

  8. 每天一个 Linux 命令(20):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  9. 让一个端口同时做两件事:http/https和ssh

    相信很多人都在YY:能不能让80端口分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache.Nginx等)处理,如果是ssh协议就交给ssh服务程序(如OpenSSH Serv ...

  10. linux 安装beyond compare

    安装好后,在终端运行bcompare  就ok