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

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. awk 的使用

    awk [-F field-separator] 'commands' input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的.input-file(s) 是待 ...

  2. 在Win8中用批处理创建Oracle数据库时报“Unable to open file”

    这一问题的原因是在运行批处理时使用了“以管理员权限运行”.如果直接双击运行是没有问题的. 如果我就想用管理员权限运行呢? 出这个错误的原因是,以管理员权限运行时的当前目录不是批处理所在的目录了.所以, ...

  3. 各公司年资金归集汇总sql

    select bd_accid.accidcode, bd_accid.accidname, -- fts_voucher_b.interestdate, -- fts_voucher_b.summa ...

  4. R语言-数据高级管理

    数学函数 abs() 绝对值 sqrt() 平方 ceiling() 向上取整 floor() 向下取整 trunc() 截取整数部分 round(x,digits = n) 保留几位小数 统计函数 ...

  5. C#开发分享:如何改变系统鼠标样式

    开发过程中发现需要用到改变鼠标样式(就是光标的样子),但是在网上找了很多资料,都是介绍在程序中使用,我需要的效果时在系统级使用.现在找到了,分享给大家. [DllImport("user32 ...

  6. Hibernate4 获取SessionFactory

    import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.c ...

  7. createjs easal.js制作了一个很简单的链路图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. Unity上一页下一页切换功能实现源码(仅供参考)

    在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...

  9. java.lang.NoClassDefFoundError 解决方案

    http://stackoverflow.com/questions/9870995/android-java-lang-noclassdeffounderror 像网络了上说的一般这种问题是 运行时 ...

  10. 转mysql 多表 update sql语句总结

    mysql 多表 update 有几种不同的写法. 假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是ProductPrice表,我们要将ProductP ...