- 积分
- 19
- 注册时间
- 2007-1-25
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2010-3-9 16:19:19
|
显示全部楼层
来自 湖北武汉
其实,这个问题在COMSOL书上有记载:
《COMSOL Multiphysics基本操作指南和常见问题解答》马慧,王刚主编,人民交通出版社
最常见的产生负浓度值的原因是数值噪音:当物质浓度接近于0时,数值噪音就变得比较显著。如果发现非常小的负浓度值,很可能是数值噪音引起的。在纯粹的对流-扩散模拟中,浓度的最小单位并不重要,所以为了避免负值问题,可以加一个任意的基线浓度使得浓度结果都大于0。而存在浓度的反应项时,最小浓度和原始浓度是重要的,也就是说这时需要考虑其他方法来保持浓度始终是正的。
另一个出现负浓度值的原因是在空间或时间上的非连续性,比如,初始条件不连续。举个例子,考虑一维瞬态对流-扩散方程dc/dt-0.01*div(grad(c)+u*c)=0,其中对流沿着正的x方向(即方向矢量为u=1)。初始条件设置为0,在两个端点的边界条件分别设置为1和0。这个PDE的物理意义是刚开始快速变化,并逐渐沿x正向扩散的过程。然而,对于默认的形函数(二阶Lagrange),仅连续函数才可作为FEM的解。因此在时间迭代开始前,对非连续初始值进行修改,这常常会导致t=0时的解的小波动。在如上例子中,t=0时的浓度局部会存在较小的负值,如下图所示。
在t=0, 0.01, 0.1, 0.2, 0.3.时的瞬态对流-扩散方程的解。这类情况也会导致振荡解和收敛问题。使用COMSOL Multiphysics的内建平滑Heaviside函数可以避免这类问题,比如flc2hs,这是为了以一种可控的方式平滑初始条件的非连续性。在上述的对流-扩散问题中,为了避免t=0时负浓度值,用户可以使用初始条件(1-flc2hs(x-0.01,0.05)),为了获得更多的信息,可以参考COMSOL Multiphysics用户指南中的“Variables and Expressions”章节。
严重的负浓度值通常暗示着使用的数学模型没有正确地描述物理过程,这种情况下修正数值并不能解决这个问题。潜在的原因是在反应项中存在着定常的减少,这个近似仅能对大浓度起作用。当浓度达到0,反应项继续消耗反应物,最后导致了负浓度值。为了避免这个问题,用户必须确保在反应物浓度到达0时,反应速率为0。这可以通过如下对源项的修正来实现,比如:Q*(c>0),或Q*flc1hs(c-w/2,w),其中w是足够小的数。
网格分辨率另一种引起严重负浓度的原因是网格分辨率不够精细。在高浓度区域和大反应项或快速反应动力学中出现负浓度值时通常会碰到收敛性问题。研究细化网格时负浓度问题是否变好和变坏是非常有用的。如果变好,就知道如何做。如果变坏,就需要检查模型的物理过程。
消除网格分辨率问题和负值的好方法是因变量使用对数浓度,而不是浓度。这样做的原因是线性变化网格有时不能描述浓度变化的指数行为。另外,对数浓度保证了在求解过程中浓度不会出现负值。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|