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

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. tengine+tomcat配置

    # 根据你服务器的cpu核数来确定此值 worker_processes 4; error_log logs/error.log crit; #error_log logs/error.log not ...

  2. 监控服务 - Nagios配置文件详解

    Nagios的配置文件: Nagios安装后有四种默认的配置文件:主配置文件.CGI配置文件.资源定义文件.对象定义文件.这些配置文件间具有一些关系,只有充分理解各配置文件,才能使得配置Nagios服 ...

  3. MySQL5.7安装与配置(YUM)

    安装环境:CentOS7 64位,MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/  # ...

  4. dom4J 学习

    Java给我们提供了标准的W3C接口实现,已完成对XML的处理.主要有两大类,分别是DOM操作,SAX解析.DOM可以将XML加载到内存中,对XML进行方便的增删查改.由于是将整个XML都加载到内存中 ...

  5. Android sdk tool android 命令参数

      命令参数说明: $ ./android --? Error: Flag '--?' is not a valid global flag. Did you mean to specify it a ...

  6. Android sqlite数据库自定义存放路径办法参考(未验证)

    public class TestDB extends SQLiteOpenHelper { private static final String DATABASE_NAME = "use ...

  7. centOS安装网卡驱动

    作为一个小白来说,安装驱动之类的真是无心下手的感觉,在学习了http://www.centoscn.com/image-text/config/2013/0816/1269.html这篇帖子的步骤之后 ...

  8. 设计一个Stack,要求Push、Pop、获取最大最小值时间复杂度都为O(1)

    面试的时候,面试官让设计一个栈,要求有Push.Pop和获取最大最小值的操作,并且所有的操作都能够在O(1)的时间复杂度完成. 当时真没啥思路,后来在网上查了一下,恍然大悟,只能恨自己见识短浅.思路不 ...

  9. 帝国cms 无法生成静态页

    建立目录不成功!请检查目录权限 安装完了帝国网站管理系统(帝国CMS)之后,没有进行初始化内置数据的步骤,而引起的错误.其实只要你按照安装说明一步一步下来就不会出错. 解决办法:初始化内置数据 帝国c ...

  10. 通过创建临时表合并hive小文件

    #!/bin/bash #set -x DB=$1 #获取hive表定义 ret=$(hive -e "use ${DB};show tables;"|grep -v _es|gr ...