在没有他人帮助下,如何入门COMSOL?

转载自知乎,作者:灵魂求解器


如题,这里说的是完全靠自己的情况下,不问别人。

说到入门,那需要入门的人一定是个完全没有接触过COMSOL的新人。不管你接到什么样的科研任务,如果你想独立做出来,或者做的像样,甚至最后哪怕做不出来,你也想知道问题出在哪里,那就必须踏踏实实从头学起。

关于COMSOL的入门,网络上有很多经验可循。我这里结合我自己的经验再说一说。诚然,对于COMSOL来说,有人手把手教你的时候,是一种幸运,而且也会学的很快。但是完全依靠自己就不行吗?这里我想说完全可以,只要你真的想好好学。

第一:对COMSOL和仿真一定要有一个整体的概念

什么意思?也就是说,你要明白COMSOL到底是个什么东西。这里可能有人会说,COMSOL就是仿真软件呗。没错,但仍然有很多人以为,仿真软件就是给参数,出结果,可以画出很酷的三维图。如果完全对数值仿真没有一个概念了解的话,很容易陷入这样的误会当中。没错,我说的就是某些拍脑门想idea的老板们,自己觉得COMSOL无所不能,就扔给学生去做仿真,从来也不调研一下到底能不能实现,这就导致很多学生像无头苍蝇,毫无头绪,愁眉苦脸。

此时你应该:

参加COMSOL的workshop,或在COMSOL官网或其他视频网站学习入门视频,或利用COMSOL官网的宣传手册学习。同时你还需要了解一点关于数值仿真的内容,比如了解什么是前处理,什么是求解器,什么是后处理。有限元到底是什么东西,哪怕是科普性质的文章都可以看一看。具体再了解一下最简单的偏微分方程数值求解,比如拉普拉斯方程,一维传热方程。了解边界条件是什么,为什么要绘制网格。

这个期间有一到两天时间足够了,毕竟绝大多数需要COMSOL做仿真的人都有一定的数学或物理基础。

第二:要熟悉COMSOL的操作

拿到一个新的软件,我自己的经验是,我会随便点一点菜单栏,看看都有什么东西。熟悉一下有哪些快捷键,或者弹出菜单都有什么。有些东西就是字面意思,比如添加物理,添加几何。有些不理解也没关系,至少需要什么操作你能知道在哪去找。

经常看别人的问题就会发现,有很多问题是涉及到该如何操作的,比如如何定义函数,如何调用函数,如何设置变量,如何画出几何阵列,如何添加材料等等。说实话,即便是在我刚开始学COMSOL,还没有做过太多案例的时候,这些问题对我来说也不是问题。因为一旦我遇到这些情况都会主动去找一找,在菜单栏翻一翻,每个节点右键弹出菜单看一看,很快就能找到对应的设置。这些问题完全不需要到处询问,如果没人回答,难道放着不做了吗?

此时你应该:

把COMSOL设置成中文,当然英语好也可以直接英文。把COMSOL所有高级功能都打开,比如方程视图,稳定性等。如果某个设置不太好找,那就多打开菜单看一看,多点击右键弹出菜单找一找。另外,就是多做案例,做的多了,很多操作自然就会了。

第三:多做COMSOL的案例

目前为止,我个人认为COMSOL的案例是最优秀的教材,用户手册是需要有一定使用经验的人才需要看的,不合适新人。

上面提到COMSOL的操作设置。很多高级设置不是你一下子就能自己悟出来的,比如边界递增载荷。在计算瞬态流体的时候,如果入口速度过大,会导致不收敛。其中一个解决方案就是利用单调递增的函数,使边界速度从0缓慢增加到最大值。这种方法实际上在很多案例里面都有。所以多做案例才是熟悉COMSOL最快最便捷的方法。

我的经验是,把需要用到模块所涉及的案例通通做一边。做案例的时候一定要做到多思考,举一反三。关于学案例,我经常收到的反馈是,照着案例做一边会了,做自己的模型就有问题。或者说学案例只是过了一边,很多操作或设置看不懂。事实上,看不懂是正常的。但是这些人并没有真正去思考问题,也没有主动去寻找答案。更没有做到举一反三。

首先,做案例除了按照案例步骤操作一边外,还需要动脑思考。思考你不懂的操作,比如它用了一个弱贡献,那为什么需要额外的弱贡献,边界不满足吗。或者它为什么用分离步求解器而没有用全耦合求解器。其次,把你没有见过的特别值得学习的操作好好回味一下,哪怕仅仅是绘图的技巧。最后,举一反三,案例之所以会运行,说明参数都是适当范围的,可以自己改一改输入参数,看看收敛情况如何。或者改变计算域形状,改变几何尺寸等等。

对模型的理解,对COMSOL的理解是日积月累的,而不是一下子瞬间的事情。所以要长期的做案例,长期积累,哪怕把某个案例做两遍,三遍。

如果你不熟悉COMSOL的操作,那做案例一定要按照操作步骤,据我了解COMSOL案例中虽然也有错误或BUG,但是很少见。我经常看到有新人遇到这样的问题。比如他做的是带有流体和固体的传热问题或耦合问题。在添加固体材料后,材料中提示缺少动力粘度。你用的是固体,用膝盖也能想一想哪里来的动力粘度。按照案例继续设置,这个问题就会消失。但仍然有很多人遇到这样的问题就会去询问。

熟悉COMSOL不是一天两天的事情,用的多,想的多才能慢慢熟悉。这需要一个长期的过程。

第四:帮助和手册

如果新人过了初期阶段,基本操作都会了,也理解了自己的模型,但是一些模型中的具体问题还不太懂,这时候需要查看模型用户手册。或者直接点击帮助。用户手册包含模块的很多信息,包括物理方程,节点的使用等等。

第五:利用网络

虽然COMSOL的案例很多,但做仿真的问题更多。

有些老板喜欢拍脑门让学生做仿真。老板自己不懂,学生更不懂。这个时候如果你不幸遇到这种状况,首先要明确COMSOL到底能不能做。而能不能需要你对这个问题有深刻的理解才行。如果不清楚就需要查阅相关的文献。网络上可利用的资源还是很多的。比如COMSOL官网的论坛,案例库,论文和技术资料库,用户模型交流,年会报告ppt等等。再不济还有度娘和七七八八的论坛。先明确物理问题,再搞清楚物理方程,才能正确选用合适的模块去做仿真。

第六:我认为很重要的部分

一,要深刻理解自己仿真问题的物理方程,比如,哪些非线性项会造成发散。可能需要自己去学习一些相关理论知识了。

二,深刻理解物理方程,对于调试不收敛问题会很有帮助。大多数人遇到不收敛的情况基本都是初边值,网格,或者材料参数出了问题。要避免模型中出现较大的变量梯度,或者大梯度位置要细化网格。

三,网格剖分的好不好直接决定问题能否做出来。网格剖分才能考验一个仿真用户的真实水平。复杂的问题,自动剖分网格已经不能满足要求了,需要用户手动剖分。

四,关于底层方程和弱形式。善于利用方程视图,多查看里面内置变量之间的关系。有些错误比如除零,或者负数开方,都会涉及到内部变量的一些计算。从内部变量之间的关系中找到问题出在哪里。


本文主要想告诉新人如何完全靠自己去提升仿真能力,因为鄙人就从来没问过别人,我不是所谓的大佬,只是我觉得问别人效率会更低。

下面这些话比较难听,不喜欢略过就好。

首先说,为什么你的问题没人回答?

问题太简单,随手用鼠标翻一翻菜单栏就能看到的问题,说真的,懒得回答。

问题太复杂,有些人问出错了怎么办。反正我是看不出来怎么办,需要看到实际模型,深入研究一番才能知道怎么办。但是,谁又总有那个精力去研究你的问题呢?不存在好心人总是在等着回答别人问题的。

其次,回答你的要表示感谢,但是你并不能得到完全的解答。一般经常回答问题的人也都是刚学习的新人,他们很活跃,是因为他们刚刚过了新手阶段。如果他们一旦熟悉了,搞定了自己的模型,可能某些群就直接屏蔽掉了。还有,大佬们一般回复你的问题都是建议性的,提示性的,你再接着问人家具体怎么操作,你觉得会有人继续理你吗?最怕无穷尽无休止地可着一个人问问题。伸手党是很受大佬们鄙视的。每来一个新人都问同样或类似的问题,大佬们也很累的。

最后,你问的问题,可能压根没人回答,那怎么办,能不做了吗?最终还不是要靠自己摸索么。所以问别人的效率是非常低的。

最后,三个字,靠自己。

PS:人和人的差距主要体现在态度,而不是智商和时间积累。

默认图片
bossliu
清醒 专注 努力
文章: 499

留下评论

Captcha Code