柯朗数(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上提出的一种算法(文章链接,维基百科) 现 ...
随机推荐
- 关于databinding的细节
原文在此:http://www.codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial 完整译文在此:http://www.cn ...
- FormatFloat 格式化浮点数
#和0的区别: #是对应位有值显示,无值不显示 0是对应位有值显示,无值显示0 分号后的字符串是对负值的格式化特殊定义: s := FormatFloat(.); .); .); .); ...
- 【python】遍历类的所有成员
# -*- coding: utf-8 -*- #sharejs.com提供代码,转载请注明出处 class Site(object): def __init__(self): self.title ...
- .NET 4.0运行.NET 2.0兼容方法
需要在相同目录下放一个.config文件,例如xxx.exe,就需要一个xxx.exe.config文件,内容如下: <?xml version="1.0"?> < ...
- PHP简介
PHP PHP是运行在服务器端的脚本,可以运行在UNIX.LINUX.WINDOWS.Mac OS下.PHP的特性包括:1. PHP 独特的语法混合了 C.Java.Perl 以及 PHP 自创新的语 ...
- C# webbrowser实现真正意义上的F5刷新
关于webbrowser的刷新在C#中有提供方便的方法: webbrowser.refresh(); 但是有时候会发现,不给力啊 那怎么办? 还有一招: webBrowser1.Document.Ex ...
- android-23 View.java - dispatchTouchEvent源码
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { /** * ...
- Windows平台分布式网站系统应用(转)
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
- Scala的几个小tips
1. Main方法只能写在object而不是class里 2. Unit test只能针对class或者trait,不能给object做,解决方法,把object里面要测的方法拿出来放到trait里, ...
- VS2013,VS2015设置类模板文件表头
一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...