计算机专业学comsol,有关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]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35156503/article/details/118129396

智能推荐

centos编译安装报错CMake Error: your C compiler: "CMAKE_C_COMPILE_the cmake_c_compiler is set to a c++ compiler cent-程序员宅基地

文章浏览阅读4.7k次,点赞6次,收藏4次。安装缺少依赖包: yum install -y git gcc gcc-c++ ncurses-devel bison_the cmake_c_compiler is set to a c++ compiler centos

游戏王生命值计算机,游戏王        直接扣生命值的卡有什么啊-程序员宅基地

文章浏览阅读1.3k次。满意答案secneo3133推荐于 2016.04.01采纳率:41%等级:12已帮助:7960人中文名:隐居者的猛毒药日文名:ご隠居の猛毒薬英文名:----卡种:速攻魔法属性:魔星数:----种族:----攻击力:----防御力:----卡片密码:----使用性:无限制卡包:----效果:从下列效果中选择一项发动.(1)复自己1200LP.(2)给对手造成800点伤害。中文名:小偷矮人日..._游戏王死亡考拉

android edittext过滤表情,EditText过滤emoji表情-程序员宅基地

文章浏览阅读253次。导语最近在项目中遇到一个输入法自带emoji表情无法上传的问题,想到采用禁止输入emoji的办法(其实后台数据库添加emoji表情符是更好的做法,当然有些输入框确实不需要emoji表情),搜索了很多文章都没有很完美的过滤方式,最后参考一些文章和emoji编码表实现了一个满足自身需求的。实现/*** 通用表情过滤器*/public class FilterEmojiTextWatcher imple..._andorid edittext 过滤emoji

pycharm运行出现utf8中文格式问题_pycharm该文件以错误的编码加载utf-8-程序员宅基地

文章浏览阅读3.2k次。改完了数据迁移问题之后终于又要来到了这个界面运行问题了,没想到运行python manage.py runserver 之后不是出现之前的这个问题(ps:出现的这个目标卷轴不正确的问题,最终解决的方法是重新用cmd建了项目,把manage.py文件移动到了根目录下最终也能成功运行了。)而是出现了utf-8的编码问题参考了博主的文章https://blog.csdn.net/Beyond_F4/article/details/84135949每一个都试了之后还是不行然后就自己_pycharm该文件以错误的编码加载utf-8

关于UnityShader中的TRANSFER_SHADOW_CASTER_NORMALOFFSET内置宏-程序员宅基地

文章浏览阅读4.2k次,点赞4次,收藏10次。书上关于阴影部分虽然篇幅不多,但实际上有非常多的内容,尤其是相当多的宏与函数,而且官方文档也少得可怜,再翻下一章之前,我决定把这些用到的宏能弄明白的先弄明白,要不然就像狗熊掰棒子一样什么都落不下,在后续的博客中记录一下,当做笔记,如果有哪里说得有错误,还望批评指正。再UnityCG.cginc中可以找到TRANSFER_SHADOW_CASTER_NORMALOFFSET唯一的一处定义..._transfer_shadow_caster_normaloffset

Vue3+vite搭建基础架构(10)--- 使用less和vite-plugin-vue-setup-extend-程序员宅基地

文章浏览阅读1.5k次,点赞15次,收藏16次。这里记录下自己在Vue3+vite的项目使用less来写样式以及使用vite-plugin-vue-setup-extend直接定义组件name,不使用ts语法,方便以后直接使用。_vite-plugin-vue-setup-extend

随便推点

Ubuntu下给根目录扩容_ubuntu下如何给根目录扩容-程序员宅基地

文章浏览阅读605次。Ubuntu下给根目录扩容在vm的硬盘里面扩容需要多大空间(要扩容的=扩展空间大小-现有空间),在扩展之前要把快照删了才行,因为我里面有重要的环境,我就不把快照删了,以防万一。1.安装 gpartedsudo apt-get install gparted2.启动 gpartedsudo gparted根据需求进行扩容(我这里因为之前没在硬盘参数里面扩展,所以没有可用空间)3.到这里一个都能往下做了!!!!..._ubuntu下如何给根目录扩容

新功能|Mail GPU Counter模块新增GPU图元处理和GPU Shader Cycles_uwa 捕获gpu元数据原理-程序员宅基地

文章浏览阅读550次。GPU检测分析又添Buff_uwa 捕获gpu元数据原理

webform计算某几列结果_1+x 证书 Web 前端开发初级实操考试(试卷5 )-程序员宅基地

文章浏览阅读3.4k次。本文编写于 439 天前,最后修改于 366 天前,其中某些信息可能已经过时。Web前端开发初级模拟测试卷(五)PDF版点击查看共55道题 总分:200分一、单选题共30题,60分1.在弹性盒子中,以下不属于justify-content的值是()DA flex-startB centerC space-betweenD end2.alt和title属性的特点表述正确的是()BA 不同的..._在javascript中,把字符串“789”转换为整型值789的正确方法是()avar str="789

Ubuntu软件包管理工具_请先确保软件包管理工具可用-程序员宅基地

文章浏览阅读2.8k次。本文详细的介绍了在Ubuntu/Debian下如何管理软件包。主要介绍了apt-get, apt-cache, apt-file, apt-key命令的用法。_请先确保软件包管理工具可用

wordpress手动升级为最新版本最稳妥的办法_wordpress模板升级-程序员宅基地

文章浏览阅读1.5k次。升级之前先备份,包括数据库和程序,这个是必备程序,以防出错,升级有风险,备份是必须。第一步、下载最新的WordPress安装包官网下载地址:https://cn.wordpress.org/latest-zh_CN.zip小技巧,官网下载比较慢,可以使用迅雷下载,尝试过很快。下载后,解压。第二步、替换原网站目录中的文件1、先将除了 wp-content 目录下,和 wp-config.php 配置文件的文件全部替换掉。2、将wp-content目录下除了 uploads、themes和 p._wordpress模板升级

UnicodeDecodeError: 'gbk' codec can't decode byte 0xe9 in position 7581: illegal multibyte sequence-程序员宅基地

文章浏览阅读3.2k次,点赞11次,收藏10次。  这个问题是在我在读取一段文本时出现的错误,当时的代码是这样的:   def getMovieList(item): items = {} f = open(item,"r") #这句的问题 movie_content = f.readlines() f.close() for movie in movie_content: mo..._gbk' codec can't decode byte 0xe9 in position 7581: illegal multibyte s