计算机专业学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

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签