前言
- 我在使用comsol的过程中也遇见过“LU因式分解时内存不足”的报错,总结了一下一些解决方案,供大家参考。
- 内存不足的可能原因有:1.计算机能存不够;2.边界条件等未正确设置造成计算错误;3.模型网格过细等。
解决方法
- 增加计算机内存,这个我就不多说了,量力而为,或者使用服务器;
- 重新进行网格划分。这里我想强调一下,重新进行网格划分不是简单的选择粗化网格,需要根据你的模型来着重分别划分网格,这里涉及到两个问题,网格划分的方法和网格划分的区域;
- 网格划分方法:三维建模中常用的就是使用四面体单元进行网格划分,但对于某些几何却并不是最优选择。请仔细阅读博客“如何使用几何单元进行网格划分”:链接: link.(Ps:在comsol官网的博客中有很多精华帖,值得一读。如在博客中搜索关键词“网格”,可以看到几个网格划分的经典案例的讲解)。有针对性的进行网格划分,如对于螺旋线圈使用扫掠;
- 网格划分区域:如上述博客中的轮毂案例,针对不同区域采用不同的网格划分方法,在具有较大弯曲度或者更多细节的地方细化网格,其他地方适当粗化网格;对导线考虑趋肤效应等情况时,根据趋肤效应深度采用边界层划分等,既能保证一定仿真精度,又能简化网格;
- 在网格划分区域中,还有一种方法是对于几何数量级相差较大的模型采用分区域网格划分。如我之前接触的一个模型,两个工件的几何数量级一个为厘米,一个为纳米。若纳米级这种细微工件为薄层的情况下建议根据研究目标来使用阻抗条件。网格划分的情况下可以采用边界层划分。若细微工件与大的工件相互隔离,可以在两个工件各自的邻域创建一个过度区域,对微小工件采用细化的网格划分,在各自的邻域中采用不同的细化程度进行网格划分,经过过度区域缓冲后再与大的工件连接。使用过度区域请注意边界条件和连续性条件,确保无误后再使用!!!
- 注意网格质量:右键网格->绘制,在绘制中启用单元过滤可以查看网格划分后的网格质量。网格质量的意思是,如四面体,网格划分结果中越接近正四面体的网格质量越接近1,相反接近0。我的经验是网格质量大于0.2能够得到较好的仿真速度,大于0.01即可进行仿真,小于0.01会报错。经验之谈,仅供参考!!!! 通过单元过滤,去检查模型是哪些位置网格质量差,然后有针对性的优化。
- 网格划分中的大小(Size)中自定义增长倍率和最大最小网格的大小设置也值得注意,特别是两部分不同细化程度的区域相链接时。
其他方法
- 这些方法是我在帮助文档或者官网讨论区看见的,未使用或者使用后无效的方法,请谨慎使用!!!
- Try to use Mapped mesh (if geometry is 2D) or Swept mesh (for 3D geometry) to reduce problem size and RAM requirements.
请尝试使用“映射”网格(如果几何是2D)或“扫掠”网格(对于3D几何),以减少问题大小和RAM需求。 - 2.goto study>solver configuration>solution> ** solver>direct> out of core>check it and fill the info as per ur system configuration
研究>求解器配置>解决方案> **求解器>直接>核心以外>检查它并根据您的系统配置填写信息。
链接: link. - 在\ comsol41 \ bin \ win32 \ comsol.ini和comsol服务器中的“ -Xmx”之后更改默认值.ini。我从默认的256m更改为512m。
链接: link. - 在v3.5a用户指南的第124页上,描述了如何通过更改文件comsol.opts中的MAXHEAP变量来增加默认Java堆空间,该文件在启动时加载。v3.5随附的默认值为256 MB。考虑到计算机中有多少内存,请尝试增加此值。
链接: link.
#最后,我也只是一个初学者,难以避免会有一些错误和疏忽的地方,若有问题,请留言。
补充
-
小木虫上这篇帖子“ 资深大牛花费大量时间总结出的COMSOL使用技巧,童鞋们有福啦"给的中仿科技技术文件也讲了很多网格划分方面的细节以及其他细节,初学者可以仔细看看。
-
comsol官网的研讨会“网格划分技巧”也适合网格划分方面有问题的朋友。
-
项目3