找回密码
 注册
Simdroid-非首页
查看: 564|回复: 12

[06.对流扩散] 扩散过程中浓度出现负值

[复制链接]
发表于 2010-2-17 17:18:32 | 显示全部楼层 |阅读模式 来自 德国
本帖最后由 TBE_Legend 于 2010-3-9 09:51 编辑

各位前辈好!
开始使用Comsol不久,遇到一个问题请大家帮忙,先谢谢了。

我正模拟一个扩散过程:一个液滴滴在固体上,液体分子可以扩散到固体中。但是怎么刚刚开始扩散时,固体中液体的浓度出现负值呀?扩散系数我都是根据实验数据设定的,应该没问题,而且我也改过很多次了,都出现负值!

这个问题困扰我很久了,真的很着急。请大家帮帮忙吧。
发表于 2010-2-22 14:56:50 | 显示全部楼层 来自 上海徐汇区
Simdroid开发平台
试一下加密网格,或者人为地在固体中先弄一个浓度梯度出来。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-8 21:47:14 | 显示全部楼层 来自 德国
谢谢版主回复。加密网格后确实有改善,但还没有彻底消除负值。奇怪的是并不是网格越密效果就越好。记得版主在其他帖子中提出可以用浓度的对数代替浓度,但是,这样的话,变量的概念就变了?那个对数值才是真正的浓度,数学上可正可负,而取对数的那个值虽然一定是正的,但它不再是浓度了。很困惑
回复 不支持

使用道具 举报

发表于 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是足够小的数。
      网格分辨率另一种引起严重负浓度的原因是网格分辨率不够精细。在高浓度区域和大反应项或快速反应动力学中出现负浓度值时通常会碰到收敛性问题。研究细化网格时负浓度问题是否变好和变坏是非常有用的。如果变好,就知道如何做。如果变坏,就需要检查模型的物理过程。
      消除网格分辨率问题和负值的好方法是因变量使用对数浓度,而不是浓度。这样做的原因是线性变化网格有时不能描述浓度变化的指数行为。另外,对数浓度保证了在求解过程中浓度不会出现负值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-9 22:37:33 | 显示全部楼层 来自 德国
非常感谢monnet的解答!真是全面而系统!要好好学习一下。
很想买你提到的两本书《COMSOL Multiphysics基本操作指南和常见问题解答》,《COMSOL Multiphysics用户指南》,可惜我在国外,先看看网上能否淘到吧。
回复 不支持

使用道具 举报

发表于 2010-3-10 22:39:51 | 显示全部楼层 来自 湖北武汉
会不会数值中所说的色散现像?
回复 不支持

使用道具 举报

发表于 2010-3-15 15:03:22 | 显示全部楼层 来自 北京海淀
4# monnet
对数浓度怎样实现了啊
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-18 18:23:00 | 显示全部楼层 来自 德国
对数浓度怎样消除网格分辨率问题?
对数浓度怎么实现?难道会是默认的扩散方程得到的浓度直接取对数吧?
回复 不支持

使用道具 举报

发表于 2010-3-19 20:45:17 | 显示全部楼层 来自 北京海淀
学习
回复 不支持

使用道具 举报

发表于 2010-3-21 09:03:01 | 显示全部楼层 来自 内蒙古赤峰
合理设置边界也可以消除浓度为负的情况
回复 不支持

使用道具 举报

发表于 2010-4-30 14:32:36 | 显示全部楼层 来自 黑龙江哈尔滨
问各位一个问题,对流扩散方程中如果只有对流和扩散,别的值都设置为0。当对进行求解后,区域总浓度值会发生变化 不。
回复 不支持

使用道具 举报

发表于 2015-9-20 20:18:07 | 显示全部楼层 来自 湖北武汉
zwj03303 发表于 2010-4-30 14:32
问各位一个问题,对流扩散方程中如果只有对流和扩散,别的值都设置为0。当对进行求解后,区域总浓度值会发 ...

跟你的边界条件有关,如果没有物质的进入和离开,有没有其他源项,总浓度自然不会改变
回复 不支持

使用道具 举报

发表于 2017-4-21 16:41:04 | 显示全部楼层 来自 新加坡
很简单,因为你的边界条件给的太突然, ramp一下就可以了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-26 00:19 , Processed in 0.060696 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表