计算机专业学comsol,有关COMSOL的学习心得,与同是初学者的朋友共勉! - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

接触COMSOL也有一年时间了,相信很多朋友都有这样的感触,那就是完全不知所措,无从下手。根据网上的一些经验,参考案例,看用户手册,折腾了几个月甚至大半年的时间,对于模型计算的各种错误一头雾水,完全不知所云,胡乱的瞎改,盲目的调试,在电脑前一坐就是一小天,茶饭不思,那叫一个折磨。甚至有几天下定决心要翻译用户手册,因为有关COMSOL的教程或者知识实在是少的可怜。不过,对于我个人研究方向的模型,经历这么长时间的不断尝试,也总算是开了窍。本文希望对初学者,或者说是完全刚接触者能对COMSOL建模有个概念性的了解。错误之处,还请指出改进,在下不吝赐教。

1.先谈谈仿真建模,数值模拟,数值分析,和计算物理。

这几个概念相信大家都多少有些了解,如果是搞工程,化工,结构力学,电子学等专业朋友,可能会使用各类仿真软件做仿真,其中就会包括COMSOL。实际上仿真建模或者说数值仿真,在工程类学科中比较常听到。比如,学习过流体力学或者计算流体力学的朋友可能最常见的例子就是飞机机翼的流场仿真,或者钝头体前的激波仿真等等。而数值模拟常出现在物理类学科当中的计算中,比如做分子动力学的,光场的,模拟等离子体产生等。那么计算物理,顾名思义就是数值的方法来求解物理问题。对于数值分析,大家都不陌生,就相当于如何来求解具体方程的一个个算法,而且数值分析也是研究生数学类的基础课程。以上是我个人的一些理解,其实说这些主要是为了告诉初学者,不论你是用COMSOL也好,ANASYS也好,还是其他的商用的,内部的,自编的程序,对于数值计算一定要了解数值计算的核心过程。事实上,仿真,模拟,计算都是一回事儿,那就是解方程。

不同类型的方程,不同的编程难度,不同的算法,我们有多种选择的手段。但是常用的就几个,比如有限差分法,有限体积法,有限元法是我们经常用到的离散方程的方法。既然做模拟,做仿真,那么你的问题一定是无法用解析的方式来计算的,所以数值计算才会显得尤为重要。接下来谈一谈数值计算的核心过程。

2.如何建模

这里的建模,我指的是全过程,并不是指如何使用软件,其实软件这东西想学会还是要多练,就和打游戏没什么区别,都是电脑程序嘛。那么数值计算的核心过程就是如何把物理问题,工程问题转换为数学问题,然后进行求解。之所以有很多刚接触COMSOL的朋友完全不知道自己的研究方向应该使用什么模块来计算,就是对建模的核心问题不了解。虽然COMSOL把相关模块分的特别细,但是不代表这些模块能够满足所有的未知问题,因此,这就是需要我们自己慢慢摸索。我谈谈自己的经验。首先呢,对于一个需要模拟的问题,一定要对这些问题的物理过程有个全面的认识,这样才能很快的将其转化为数学描述。打个比方,管道流动问题,那么研究的是单相流动呢还是多相流动,是层流呢?还是湍流呢?,速度是否超声?是否考虑压缩性?是否考虑温度的变化呢,有没有其他耦合场存在呢?所以,只有把所有需要考虑的物理过程都牵扯进来,才能更好的模拟出来。当然,在建模的过程中,总会有需要舍掉或忽略的点。其次,认识物理过程之后,需要把它们通过数学方程来重新描述。这就是最核心的问题。只要知道了需要求解哪些方程,才能更快地去建立求解模型(这里包括更好地选择所要求解的控制方程,初边条件以及所要研究的区域-计算域)。

3.关于COMOSL的使用

COMSOL是基于有限元方程来求解各类方程的,所以,在这里我建议初学者们,虽然不必要去通学有限元的知识,但是如果你完全不懂有限元,那可能会遇到很多问题。因此,适当了解有限元方法是必要的,特别是需要自己加入自定义方程的朋友。接下来简单谈一下使用COMSOL的一些过程。较好的建模,是需要大家深刻理解自己模型的控制方程,初始条件以及边界条件,以及要研究的计算区域。很多时候建模费劲,就是因为对自己的方程不了解,不知道如何使用边界条件。真的是说多了都是泪啊。不过,等你对自己的模型很熟的时候,你会发现COMSOL确实是个比较不错的软件。

那么编程或者说建模第一步,就是把你所用到的参数和变量在COMSOL中事先定义好,好处就是修改方便,一目了然。

第二步,建议大家尽量把所有的高级设定功能都打开。特别是方程视图,因为建模的时候,我们需要时不时地去查看COMOSL内置方程中的一些变量和方程是什么样的,是否需要做修改。

接下来画图,建议大家尽量用最少的曲线画出你的计算域,并且计算域中尽量不要出现无关的边界或线条,因为会影响网格的划分。另外比较好的方式是把必要的边界和区域用显示的方式定义,方便添加到模块中。

对于模块的设定,当然前提是要选对模块。每个模块都会求解某个或多个物理量,比如速度,压强,温度。那么对于存在耦合的物理量,建议大家使用多物理场接口中的模块来进行耦合。虽然模块和模块之间的设置当中也存在对应的选项,但是需要手动添加,往往会忘记设置。要事先定义好材料的属性是重要的。因为材料属性如果是非线性的,它可能会影响模型的非线性程度,会增加计算难度。另外一个重点是,要清晰的知道,每求解一步,哪些物理量之间存在耦合。这些工作当然都是需要在建模之前就应该清楚的。这样做的目的是为了将来调程序做到心中有数。对于单向耦合或多向耦合的物理量之间,一定要知道那些因素会影响计算的收敛性。比如,电压的计算,如果是用电流和电导率来计算电压,你就需要知道,温度对电导率会不会有影响;如果会,那么焦耳热同时也影响温度。这就是物理量之间的耦合。在计算的时候,对于耦合比较强的模型,大家可以使用分离步计算,而非全耦合。

对于边界条件来说,往往是计算不下去的根源所在。边界条件就像个川剧大师,怎么改都不对。那么这里的建议是,对于影响较大的边界条件,可以利用递增函数来减缓边界载荷,这比直接在边界设定条件要好很多。

对于求解器来说,很惭愧,COMSOL的求解器实在太多了,并且一直没空去研究它们。不过常用的求解器无非就那么几个。COMSOL的求解,我认为包括两种求解方式,全耦合和分离步,两种求解方法,直接和迭代。然后就是里面具体的一切求解算法。对于耦合强,非线性较强的模型,个人建议使用分离步来计算。而对于一般问题,直接使用全耦合即可。对于计算内存问题,搞模拟,硬件不应该是个问题!

4.最后

希望对初学的朋友能所帮助,本人也只是了解自己方向的模块使用,绝大多数模块基本不懂,所以,希望大家多多分享自己的经验。我常用的是流场和温度场还有电磁场。祝大家建模成功。

更多学习经验传送门:http://muchong.com/t-12010954-1

[Last edited by bfamq on 2018-3-23 at 16:55]

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值