与M型档案合作的最佳实践

2014年5月14日

在ComsolMultiphysics®软件中开发模型时,通常会遇到必须反复执行的任务。这个三部分的博客系列将向您展示如何使用Model M-Files和Livelink™有效地完成重复任务为了MATLAB®。

将变体引入模型

您可以通过COMSOL多物理用户界面(UI)将许多变体引入模型。为此目的,功能(例如参数扫描和优化)允许您在量身定制的编辑字段中更改一组参数。

然而,某些类型的变化并未由UI满足。在这些情况下,Livelink™为了MATLAB®可以派上用场,因为它可以访问所有模型设置,使用comsol®API与Jav​​a®(COMSOL API)一起使用

使用Livelink™为了MATLAB®,有可能:

  • 从MATLAB®程序自动启动模拟
  • 通过使用脚本来引入模型设置的更改
  • 从头开始创建模型
    • 创建几何形状,网络,定义物理,调用求解器并进行后处理结果
  • 读取包含网格的CAD文件和文件
  • 连接到其他数据源,并从文件,数据库等读取数据。
  • 为新手创建简化的UI,以运行模型

如果您希望避免在Comsol Multiphysics UI中重复工作,那么其中许多功能很重要。

使用Livelink™从头开始构建模型为了MATLAB®

如果您是Livelink™的新手为了matlab®,然后Livelink™简介为了MATLAB®手册提供了足够的信息来使您入门。特别是Livelink™为了MATLAB®用户指南提供有关comsol多物理API中命令和它们访问的等效函数的命令的进一步资源。您实际上可以创建第一个模型M文件,该模型可以控制COMSOL多物理模型,而无需读取此文档。这是因为可以从comsol Multiphysics UI自动生成此类脚本。

让我们看一个简单的传热示例,该示例仅需要Comsol多物理基本包装即可构建和求解。几何形状可以在下图中看到,在下图中,在底部边界引入热通量并在顶部边界处散落到周围空气中。

热通量起源于底部边界的几何形状,然后消散到空气中

用comsol多物理学创建的图显示了模型的表面温度

几何形状由几个矩形组成,这些矩形彼此结合或减去。可以在下面看到用于制作此几何形状的M文件代码:

制作几何形状所需的示例M文件代码

在这里,该代码指示COMSOL多物理,以在模型树中创建矩形节点,以及在矩形之间差异的节点。您会发现定义了实体的大小和位置(POS)。这些定义可用于定义您想要的几何形状。显然,即使是小的几何形状也可能导致许多定义代码。下一节将显示如何自动创建线路。

自动生成M型文件

comsol多物理学中的所有功能都可以用代码行表示,完整模型将对应于许多代码行。您可以在Comsol软件UI中创建它,然后将其保存为M文件,而不是从头开始创建模型。这是通过选择文件>另存为,然后选择“ MATLAB(*.m)的模型文件”来完成的。

这样的M文件包含构建模型时遵循的所有步骤。通过使用Livelink™运行文件为了MATLAB®,您会注意到记录了所有执行的命令。如果该模型已经解决了几次,则通常会给求解器打电话几次,您通常不需要。如果要从MATLAB®命令行运行模型,它将多次求解模型。为了获得紧凑的M文件,您可以在保存文件之前选择文件>紧凑的历史记录。

图显示了获得紧凑的M文件所需的步骤

现在,我们将整个模型作为M文件,我们可以自由调查模型中的任何设置或更改。我们也可以为模型添加新功能。

看看您的M文件,看看您是否可以识别模型的各个部分以及如何设置事物。在模型中,有些事情将很容易理解,例如如何定义参数和几何形状。其他事情,例如求解器或图设置,可能更晦涩。但是,如果您拥有MATLAB®编码经验,则应该可以轻松地看到在哪里事物是定义的。

在下面的示例中:

示例代码显示如何定义网格设置

您可以查看如何定义网格设置。当M文件包含几何,物理,网格,求解器等的定义时,将对“ Run()”方法进行调用。这将在M文件中获取所有命令,并在COMSOL多物理学中执行它们。如果您的模型很大,请致电“ Run()”可能需要很长时间,因此,如果您想遵循解决方案进度,则可以使用此代码(在调用运行之前)打开进度窗口:

用于在调用运行之前打开进度窗口的代码

没有M型文件的速度更快地工作

如果您使用MATLAB®使用comsol软件API更改模型并失去了更改的跟踪,很高兴知道您始终可以将模型保存为MPH文件,然后将其加载到Comsol Multiphysics UI中,并在此处进行检查。此外,您也可以将mph文件加载到matlab®中,并从那里操纵它们。

以下示例将加载MPH文件,并在模型的各个部分上执行“ for”循环,然后再解决该循环(其几何形状)。

加载MPH文件并运行已更改的模型零件上的代码

选择

与M档案合作的最大原因之一是能够操纵几何形状。为了做到这一点,您需要了解选择:

为传热和热通量边界的边界条件设置物理的代码

上面的代码设置了一些传热物理,包括一系列边界上“热通量边界”的两个边界条件,这些条件是数字标识的。当几何形状以引入更多域,边界或顶点的方式更改时,这些数字也会改变。您将需要一种方法来跟踪这些数字,或避免使用它们。

这些将是本系列中接下来两个博客条目的主题。敬请关注。

本系列的其他帖子

  1. 如何在选择中手动与实体编号一起工作
  2. 自动处理comsolMultiphysics®中的选择

MATLAB是Mathworks,Inc。的注册商标。


评论(13)

发表评论
乐动体育app
加载...
彼得·钦杜拉(Peter Cendula)
彼得·钦杜拉(Peter Cendula)
2014年9月16日

感谢您有用的博客!我试图在更大的MPH文件中“紧凑历史记录”,并遇到了“未知模型参数”的错误。有什么方法可以解决这个问题吗?

谢谢
彼得

拉尔斯·格雷格森(Lars Gregersen)
拉尔斯·格雷格森(Lars Gregersen)
2014年9月16日

Comsol在执行紧凑的历史时分析结构,但有时必须放弃。请将MPH文件发送到support@comsol.com这样我们就可以看看。

Mathias Perrin
Mathias Perrin
2015年12月29日

谢谢您的博客,

我每天都将Matlab Livelink与Comsol一起使用,我认为这非常有效。

当您将MATLAB优点(图形,数据后,高级数学功能(例如FFT,矩阵操作))与COMSOL优点(多物理方法,复杂物理问题的数值计算)相结合时,这是一个很棒的工具。

这就是为什么我试图使用MATLAB编译器编译MATLAB程序的原因。这个想法是能够分发将使用COMSOL许可证和MATLAB运行时库的Exécutables。

我正在尝试使用MPHLOAD()编译一个简单的脚本,该脚本打开了一些.MPH模型。

直到现在,我总是在运行时有一些错误。这可能是正确设置运行时需要的.dll和Java文件的路径的问题。

我与Comsol讨论了,但它们不支持MATLAB编译器,当然,MATLAB不支持Comsolexécutables的编译。

因此,如果有人尝试过并且有一个程序,或者至少有一些经验,我会很高兴知道它!

干杯,

Mathias

拉尔斯·格雷格森(Lars Gregersen)
拉尔斯·格雷格森(Lars Gregersen)
2016年1月4日

你好

尽管不正式支持与MATLAB编译器编译的应用程序,应与Comsol Multiphysics一起使用。

创建应用程序时,请在应用程序开头中包含呼叫MPHSTART。确保使用包含comsolpath的mphstart的一种变体。确保在运行时使用正确的comsolpath。必须在计算机上安装comsol才能运行该应用程序。

如果这不起作用,请联系支持,我们将看看是否可以为您提供帮助。请在给我们的消息中使用MATLAB的版本和您使用的操作系统。

奥斯卡·迪亚兹(Oscar Diaz)
奥斯卡·迪亚兹(Oscar Diaz)
2016年4月7日

HEJ LARS,
Matlab Livelink上的不错的博客入口。通过创建模型,压实历史记录并保存M文件以检查一些语法错误,我在途中学到了一些有用的技巧。
我所做的程序在执行过程中创建新的几何形状,调用来自MATLAB的不同comsol-intrunctions。始终,当网被崩溃和红色文本时,MATLAB命令窗口表示错误,并取消了执行。
现在,在执行3H后,执行在某个地方放了库存,但我找不到哪里。在正常执行中,它从早期开始就一直在调用相同的功能,直到它死了……
我猜它可能必须使用内存(不确定)来做些事情,因为解决此问题时唯一可能的关闭/停止是关闭启动COMSOL服务器的OS命令窗口。然后,我返回MATLAB编辑器,并找出一个活动断点(即使程序到达该代码行时,在代码行上停止执行的绿色箭头),即使Comsol Server已经关闭(无法继续执行,无法继续执行)。是否可以是存储在comsol API内存中的对象的大小会溢出可用的内存(前面步骤的输出文件是CA. 100MB)
我在这里库存了很长时间,您有任何建议吗?

拉尔斯·格雷格森(Lars Gregersen)
拉尔斯·格雷格森(Lars Gregersen)
2016年4月8日

嗨,奥斯卡

不看到您的脚本,很难猜测出什么问题。当您使用脚本创建大型模型时,很容易用尽内存,因为您可以轻松地创建成千上万个几何对象,物理和设置,这些对象当然会占据内存。

使用脚本创建模型和几何形状时,最常见的与内存有关的错误是,当您使用模型创建模型时
model = modelutil.create('model1')
您执行的每个后续语句都会在模型历史记录中添加一些信息。这样做是为了使您以后可以通过所有步骤导出M文件(或VBA或Java-File)。但是,导出此类文件很少有用(因为您已经有一个可以执行您想要的脚本),并且可以始终使用“紧凑的模型历史记录”来获得所需的东西。
解决方案是关闭历史记录。我们总是在Comsol会议上提供的教程中介绍此主题。乐动滚球app下载在MATLAB手册的Livelink简介中也提到了它,它说您需要写:
Model.Hist.dissable;

如果这无助于您的情况,请将您的脚本/模型发送给Comsol支持,我们将在其中查看它。

r karimi
r karimi
2019年1月9日

感谢您有用的博客。我已经使用了与MATLAB的Comsol Live链接进行优化。我的优化代码是用MATLAB编写的,作为目标函数,我构建了Comsol模型,运行并使用其结果。问题在于,当我从优化代码调用目标函数时,呼叫8到9次后,该模型以未找到解决方案的错误退出。但是,当我单独调用目标函数时,MATLAB的输入相同,它将完全运行。我认为问题在于,上一个型号从上一个通话中没有关闭。如何在Matlab Live链接中关闭模型?
如果您能帮助我,我真的很感激。

拉尔斯·格雷格森(Lars Gregersen)
拉尔斯·格雷格森(Lars Gregersen)
2019年1月9日

嗨,卡里米

当模型执行优化时,我们看到的最常见的问题是,由您的优化代码确定的参数值不在模型定义良好的区域之外。另外,您必须确保模型的初始值与您的新参数值一致。

您可以使用modelutil.remove从comsol Multiphysics Server中删除模型,但是您应该很少使用它。
每当您启动模拟时,只需使用MPHLOAD重新加载模型即可。这样,您可以确定您的仿真始于已知状态。
如果您继续在模型上遇到问题,则可以将其发送给支持我们将在其中查看它的位置。

库珀李
库珀李
2020年5月2日

感谢您的出色解释,我是否可以单独使用Comsol来实现一些MATLAB功能,例如循环和Findpeaks(它们都是MATLAB内置功能)?

真挚地,

拉尔斯·格雷格森(Lars Gregersen)
拉尔斯·格雷格森(Lars Gregersen)
2020年5月4日 comsol员工

自写这篇博客文章以来,我们已经在Comsol多物理学中添加了模型方法和Addins。这些添加使使用Java编程语言创建程序成为可能。如果您的自定义编程不严重依赖数字和/或MATLAB工具箱,则该新方法可能适合您。
我不熟悉FindPeaks功能(它重新汇用了信号处理工具箱),但是从其名称中,它听起来像是您想使用Matlab的东西。

Chin Neng Leong
Chin Neng Leong
2021年9月1日

感谢您分享。

我正在尝试使用变形配置导出变形的几何形状。但是,我总是在最后一次步骤中获得变形的几何形状。我设法修改了变形配置中的时间,但是我想我需要更新,然后只能导出感兴趣的时间点。有谁知道更新变形配置的MATLAB代码是什么?

另外,我发现.m文件仅记录到研究之前的步骤。无论如何,是否可以将所有步骤保存到.m文件中的结果部分?

谢谢
Chin Neng

拉尔斯·格雷格森(Lars Gregersen)
拉尔斯·格雷格森(Lars Gregersen)
2021年9月1日 comsol员工

当您将模型保存为M文件时,包括所有步骤。包括设置结果。如果您有问题,我建议您联系支持。
我对导出变形的几何形状有类似的建议。发送您的模型和您必须支持的MATLAB代码,有人会看看。

Chin Neng Leong
Chin Neng Leong
2021年9月1日

好的。谢谢你。

探索comsol乐动体育赛事播报博客