COMSOL——LiveLink for MATLAB学习3——奶酪模型

学习1:https://blog.csdn.net/jessica0307/article/details/105444407
学习2:https://blog.csdn.net/jessica0307/article/details/105451892

趁热打铁,继续用livelink for MATLAB生成随机几何。COMSOL官网博客上介绍了如何使用APP来构建奶酪的几何模型,基于Java脚本语言
http://cn.comsol.com/blogs/how-to-create-a-randomized-geometry-using-model-methods/奶酪几何模型

这里用MATLAB重新写一下

function out = cheese
%
% cheese.m
%
% Model created on Apr 11 2020,  by COMSOL 5.5.
import com.comsol.model.*
import com.comsol.model.util.*
model = ModelUtil.create('Cheese');
model.component.create('comp1', true); % 生成组件1
model.component('comp1').geom.create('geom1', 3); % 生成3D几何
model.component('comp1').mesh.create('mesh1'); % 生成网格

%奶酪中的小孔初始化参数
number_of_hols = 10; %初始化并定义奶酪内的小孔总数
ind = 0; %初始化并定义用于后续步骤的索引计数器
Pos = zeros(1,3);
hr = 0.0; %每个小孔的 xyz 位置和半径。

%定义奶酪的高度、半径、环线粗细以及小孔的最大和最小半径
h_cheese = 20.0;
r_cheese = 40.0;
thickness = 0.2;
rmin_hole = 0.1;
rmax_hole = 1.0;
model.component('comp1').geom('geom1').lengthUnit('cm'); %将几何的长度单位设置为 cm
model.component('comp1').geom('geom1').selection().create('csel1', 'CumulativeSelection'); %创建一个新选择集,并添加标签 csel 和名称 CumulativeSelection。

while (ind < number_of_hols) %初始化 while 循环,创建指定数量的孔
    Pos(1) = (2.0*rand-1.0)*r_cheese; %通过调用随机方法和缩放输出来定义小孔 坐标,使小孔位于奶酪模型的外部界限之内。
    Pos(2) = (2.0*rand-1.0)*r_cheese;
    Pos(3) = rand*h_cheese;
    hr = rand*(rmax_hole-rmin_hole)+rmin_hole; %在规定的限值范围内定义小孔半径
  
    if ((sqrt(Pos(1)^2+Pos(2)^2)+hr) > r_cheese-thickness) 
        continue;
    end %检查小孔的位置和尺寸是否会使其脱离奶酪。
    if (((Pos(3)-hr) < thickness) || ((Pos(3)+hr) > h_cheese-thickness)) 
        continue;
    end
  
    sph = ['sph',num2str(ind)];
    model.component('comp1').geom('geom1').create(sph, 'Sphere'); %创建一个球体,使其名称基于当前的索引值
    model.component('comp1').geom('geom1').feature(sph).set('r', hr); %指定新创建球体的半径和位置。
    model.component('comp1').geom('geom1').feature(sph).set('pos', Pos);
    model.component('comp1').geom('geom1').feature(sph).set('contributeto', 'csel1'); %指定此球体特征属于名为 csel1 的选择集的一部分
    ind = ind + 1;
end

model.component('comp1').geom('geom1').create('cyl1', 'Cylinder'); %创建一个代表圆盘奶酪的圆柱体
model.component('comp1').geom('geom1').feature('cyl1').set('r', r_cheese);
model.component('comp1').geom('geom1').feature('cyl1').set('h', h_cheese);
model.component('comp1').geom('geom1').create('dif1', 'Difference'); %建立一个布尔差集运算。要添加的对象是圆柱体,要减去的对象是所有球体的选择
model.component('comp1').geom('geom1').feature('dif1').selection('input').set('cyl1');
model.component('comp1').geom('geom1').feature('dif1').selection('input2').named('csel1');
model.component('comp1').geom('geom1').run(); %运行整个几何序列,将所有球体从圆柱体中切除,最终形成圆盘奶酪
model.component('comp1').view('view1').set('transparency', true);
mphgeom(model,'geom1');
mphsave(model,'cheese');
out = model;
  • 13
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值