COMSOL——LiveLink for MATLAB学习2——随机几何的构建

COMSOL—— LiveLink for MATLAB学习2——随机几何的构建

上一篇学习了一下如何打开与使用Livelink for MATLAB。
https://blog.csdn.net/jessica0307/article/details/105444407
这一篇学习一下具体如何使用MATLAB脚本构建COMSOL模型。COMSOL官方给出了几个学习案例,对于自己的模型,也可以在COMSOL中另存为.m文件然后学习各命令行的具体含义(注意导出之前先压缩历史记录)。不需要一次记住所有,边用边查就行。

先从构建模型几何开始,在实践中学习。
模型描述:构建一个随机生成的颗粒填充几何,2D,粒径满足正态分布。

MATLAB 代码

function out = random_circle
% Model created on Apr 11 2020,  by COMSOL 5.5.

通用模型语句,相当于COMSOL desktop的模型引导部分,确定几何维度、物理场等

import com.comsol.model.*
import com.comsol.model.util.*

model = ModelUtil.create('Model');
model.component.create('comp1', true); % 生成组件1
model.component('comp1').geom.create('geom1', 2); % 生成2D几何
model.component('comp1').mesh.create('mesh1'); % 生成网格
model.component("comp1").geom("geom1").lengthUnit("mm");

设置全局参数,目前在字符串和数值这里有点混乱,如果直接model.param.set(‘Length’,‘1’),那么后面无法用直接调用Length。不太清楚,先这么着吧。

Length = 1;
model.param.set('Length', num2str(Length)); % 参数名称,值
model.param.descr('Length', 'The Length of a cube');% 参数描述
vf = 0.5;
model.param.set('vf', num2str(vf));
model.param.descr('vf', 'The volume fraction of fillers');
Vsq = Length^2;
model.param.set('Vsq', num2str(Vsq));
miu = 0.05;
model.param.set('miu', num2str(miu)); % 用于控制circle大小的正态分布参数
model.param.descr('miu', 'Average radius');
sigma = 0.02;
model.param.set('sigma', num2str(sigma));
model.param.descr('sigma', 'standard deviation');

接下来我们去生成几何, 先画一个正方形

model.component('comp1').geom('geom1').create('sq1', 'Square');
model.component('comp1').geom('geom1').feature('sq1').set('size', 'Length');
model.component('comp1').geom('geom1').feature('sq1').set('pos', [0 0]); % 坐标原点为默认值,此句可以省略
model.component('comp1').geom('geom1').run('sq1');

此时可以用mphgeom命令在MATLAB里看一下效果

 mphgeom(model,'geom1');

接下来去生成填充的随机圆的坐标与半径

n = 10000;
Vsum = 0;
Pos = zeros(n,2);
R = zeros(n,1);
idx = 1; % index for circle 
flag = 0;
while (Vsum < Vsq * vf)
    r = abs( normrnd(miu,sigma) ); % 随机生成cicle
    pos = [Length * rand(1,1) Length * rand(1,1)];
    for k = 1:idx %将随机生成的cicle与已存在的所有cicle进行距离判断
        Distance = sqrt((pos(1)-Pos(k,1))^2+(pos(2)-Pos(k,2))^2);
        rsum = r+R(k);
        if Distance < rsum
            flag = 1;
            break;
        end
    end
    
    if flag == 1 % 如果新生成cicle与任意一个已存在cicle重叠,则进入下一轮循环,放弃此次生成的cicle
        flag = 0;
        continue;
    end
    
    if (pos(1)-r < 0) || (pos(2)-r < 0) || (pos(1)+r > Length) || (pos(2)+r > Length)%判断是否在正方形内
        continue;
    end
    
    V = Vsum + 2 * pi * r * r;
    if V > vf * Vsq %进行体积分率条件判断
        break;
    end
    
    % 至此,随机生成的cicle参数满足不重叠条件、正方形内条件与体积分率条件判断,将其正式生成几何
    cl_name = ['cl',num2str(idx)]; % cicle序列号
    model.component('comp1').geom('geom1').create(cl_name, 'Circle');
    model.geom('geom1').feature(cl_name).set('base', 'center');
    model.component('comp1').geom('geom1').feature(cl_name).set('r', num2str(r));
    model.component('comp1').geom('geom1').feature(cl_name).set('pos', pos);
    mphgeom(model,'geom1');
    
    Pos(idx,:) = pos;
    R(idx) = r;
    idx = idx +1;
    Vsum = Vsum + 2 * pi * r * r; 
    
end
mphsave(model,'random_circle'); % 保存mph文件至当前文件夹
out = model;                

模型效果图

运行结果

COMSOL Desktop

一方面代码最后一行直接生成了mph文件,可以在comsol中打开
另一方面可以通过服务器打开(文件→COMSOL Server→从服务器导入App)
从服务器导入App
今天就到这里吧。最后附上参考文献
天乐树的博客:http://blog.sina.com.cn/s/blog_4a0a8b5d0101lnwf.html
感谢天乐树!

  • 40
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
### 回答1: B'COMSOL Livelink for MATLAB 是一种软件工具,它允许 MATLAB 用户将它们的模型集成到COMSOL Multiphysics® 中。通过使用Livelink,用户可以轻松地利用两个软件之间的强大交互作用在工程、科学和其他领域中进行建模和仿真。 ### 回答2: COMSOL LiveLink for MATLAB是一个功能强大的软件,可将COMSOL Multiphysics®仿真与MATLAB®软件的数学计算和数据分析功能结合起来。使用MATLAB作为用户界面,可以更方便地控制COMSOL Multiphysics仿真,并使用MATLAB的数学算法和绘图功能来分析和可视化仿真结果。 COMSOL LiveLink for MATLAB提供了许多有用的功能,例如: 1. 参数扫描和优化:用户可以轻松地利用MATLAB的优化工具来进行参数扫描和优化,以选择最佳的设计参数值。 2. 数据处理和可视化:用户可以使用MATLAB的数学算法和绘图工具来处理和可视化COMSOL仿真结果,以更好地理解仿真结果。 3. MATLAB命令调用:用户可以使用MATLAB命令来调用COMSOL仿真模型,并将仿真结果存储为MATLAB变量,以便后续处理和分析。 4. 并行计算:用户可以使用MATLAB的并行计算功能来加速COMSOL仿真的计算速度,从而提高仿真效率。 5. 应用构建:用户可以使用MATLAB构建自己的应用程序,并将COMSOL仿真集成到应用程序中,以便用户更方便地进行仿真和分析。 总之,COMSOL LiveLink for MATLAB是一个功能强大且灵活的软件,可以方便地将COMSOL Multiphysics仿真与MATLAB的数学计算和数据分析功能结合起来,为用户提供更完整和广泛的仿真分析工具。 ### 回答3: COMSOL LiveLink for MATLAB是一种将MATLABCOMSOL Multiphysics有机结合起来的软件工具。通过LiveLink,用户可以实现在MATLAB环境下使用COMSOL Multiphysics的全部功能,包括模型的建立、求解和结果的可视化等工作。 在COMSOL Multiphysics中,用户可以使用COMSOL自带的建模模块来构建模型,也可以使用MATLAB构建模型。如果用户希望使用MATLAB构建模型,那么LiveLink就是必不可少的工具。用户可以通过简单的命令,在MATLAB环境下调用COMSOL Multiphysics的功能。例如,用户可以使用MATLAB编写脚本来构建几何模型、定义物理场、设置求解器选项等。在这个过程中,COMSOL Multiphysics的一系列API(Application Programming Interface)将被执行,从而让用户能够在MATLAB中实现模型的全部构建过程。 一旦模型构建完成,用户就可以使用MATLAB来控制求解过程。用户可以使用MATLAB的强大计算能力来指导计算过程,并且可以在求解过程中实时获取和处理COMSOL Multiphysics返回的结果数据。这些结果数据可以在MATLAB环境下进行可视化处理,从而让用户更方便地分析和理解模型的结果。 总之,COMSOL LiveLink for MATLAB是一个非常实用的软件工具,它能够把MATLABCOMSOL Multiphysics结合在一起,让用户能够以更高效的方式建立、求解和分析模型。在科学研究和工程实践中,这个工具将会发挥越来越重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值