打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[转载]Comsol和Matlab联合仿真
1、建立模型
    可以在Comsol中先建立好模型或者执行一些操作,然后再通过菜单“文件”->“另存为模型M文件”,查看M文件中的语句,即可了解相应的操作过程和Matlab调用语法;
    例:
 
function out model
%
a2.m
%
Model exported on Dec 2012, 09:29 by COMSOL 4.2.0.187.
 
import com.comsol.model.*
import com.comsol.model.util.*
 
model ModelUtil.create('Model');
model.modelPath('D:QSQDocumentsComsol');
 
model.modelNode.create('mod1');
 
model.geom.create('geom1'3);
 
model.mesh.create('mesh1''geom1');
 
model.physics.create('solid''SolidMechanics''geom1');
 
model.study.create('std1');
model.study('std1').feature.create('stat''Stationary');
 
model.geom('geom1').lengthUnit('mm');
model.geom('geom1').run;
 
model.geom('geom1').feature.create('blk1''Block');
model.geom('geom1').feature('blk1').setIndex('size''100'0);
model.geom('geom1').feature('blk1').setIndex('size''50'1);
model.geom('geom1').feature('blk1').setIndex('size''10'2);
model.geom('geom1').feature('blk1').set('base''center');
model.geom('geom1').run('blk1');
 
mphgeom(model, 'geom1');
 
out model;
 
    上面的这个例子,在Comsol中新建了一个3维模型的稳态分析,将单位设置为mm,几何模型中建立了一个长方体,宽度100,深度50,高度10。基本上通过函数的命名即可看出其实际的意义。
    倒数第二句mphgoem函数的作用是在Matlab的Figure中显示几何模型。
    打开桌面上的“COMSOL4.2 with MATLAB”快捷方式,然后运行上述代码,即可看到如下结果:
    
 
2、设置材料
    设置材料也可以在Comsol中先设置好,然后再另存为模型M文件,下面代码将上述模型材料设置为铝,对于结构分析来说其实关键设置杨氏模量、泊松比和密度就可以了;
model.material.create('mat1');
model.material('mat1').name('Aluminum');
model.material('mat1').set('family''aluminum');
model.material('mat1').propertyGroup('def').set('relpermeability''1');
model.material('mat1').propertyGroup('def').set('heatcapacity''900[J/(kg*K)]');
model.material('mat1').propertyGroup('def').set('thermalconductivity''160[W/(m*K)]');
model.material('mat1').propertyGroup('def').set('electricconductivity''3.774e7[S/m]');
model.material('mat1').propertyGroup('def').set('relpermittivity''1');
model.material('mat1').propertyGroup('def').set('thermalexpansioncoefficient''23e-6[1/K]');
model.material('mat1').propertyGroup('def').set('density''2700[kg/m^3]');
model.material('mat1').propertyGroup.create('Enu'[native2unicode(hex2dec('6768'), 'Cp1252'' native2unicode(hex2dec('6c0f'), 'Cp1252'' native2unicode(hex2dec('6a21'), 'Cp1252'' native2unicode(hex2dec('91cf'), 'Cp1252'' native2unicode(hex2dec('548c'), 'Cp1252'' native2unicode(hex2dec('6cca'), 'Cp1252'' native2unicode(hex2dec('677e'), 'Cp1252'' native2unicode(hex2dec('6bd4'), 'Cp1252']);
model.material('mat1').propertyGroup('Enu').set('poissonsratio''0.33');
model.material('mat1').propertyGroup('Enu').set('youngsmodulus''70e9[Pa]');
model.material('mat1').propertyGroup.create('Murnaghan''Murnaghan');
model.material('mat1').propertyGroup('Murnaghan').set('n''-3.5e11[Pa]');
model.material('mat1').propertyGroup('Murnaghan').set('m''-3.3e11[Pa]');
model.material('mat1').propertyGroup('Murnaghan').set('muLame''2.6e10[Pa]');
model.material('mat1').propertyGroup('Murnaghan').set('l''-2.5e11[Pa]');
model.material('mat1').propertyGroup('Murnaghan').set('lambLame''5.1e10[Pa]');
model.material('mat1').propertyGroup.create('Lame'['Lame ' native2unicode(hex2dec('5e38'), 'Cp1252'' native2unicode(hex2dec('6570'), 'Cp1252']);
model.material('mat1').propertyGroup('Lame').set('muLame''2.6e10[Pa]');
model.material('mat1').propertyGroup('Lame').set('lambLame''5.1e10[Pa]');
model.material('mat1').propertyGroup.create('NeoHookean''Neo-Hookean');
model.material('mat1').propertyGroup('NeoHookean').set('mu''2.6e10[Pa]');
model.material('mat1').propertyGroup('NeoHookean').set('lambda''5.1e10[Pa]');
model.material('mat1').set('family''aluminum');
3、划分网格
    划分网格并显示的代码如下(自由划分网格):
model.mesh('mesh1').run;
 
mphmesh(model, 'mesh1');
    其中mphmesh函数是显示划分的网格,结果如下:
4、设置载荷和约束
    本例约束长方体的下表面,设置体载荷重力载荷,重力方向为Z轴负方向,设置代码如下:
model.physics('solid').feature.create('fix1''Fixed'2);
model.physics('solid').feature('fix1').selection.set([3]);
model.physics('solid').feature.create('bl1''BodyLoad'3);
model.physics('solid').feature('bl1').set('FperVol'{'0' '0' '-9810'});
model.physics('solid').feature('bl1').selection.all;
    设置约束时需要选择约束的位置,上面的第二行代码中的[3]为长方体下表面的编号。
5、求解
    求解的代码如下:
model.sol.create('sol1');
model.sol('sol1').study('std1');
model.sol('sol1').feature.create('st1''StudyStep');
model.sol('sol1').feature('st1').set('study''std1');
model.sol('sol1').feature('st1').set('studystep''stat');
model.sol('sol1').feature.create('v1''Variables');
model.sol('sol1').feature.create('s1''Stationary');
model.sol('sol1').feature('s1').feature.create('fc1''FullyCoupled');
model.sol('sol1').feature('s1').feature.remove('fcDef');
model.sol('sol1').attach('std1');
 
model.result.create('pg1'3);
model.result('pg1').set('data''dset1');
model.result('pg1').feature.create('surf1''Surface');
model.result('pg1').feature('surf1').set('expr'{'solid.mises'});
model.result('pg1').name([native2unicode(hex2dec('5e94'), 'Cp1252'' native2unicode(hex2dec('529b'), 'Cp1252'(solid)']);
model.result('pg1').feature('surf1').feature.create('def''Deform');
model.result('pg1').feature('surf1').feature('def').set('expr'{'u' 'v' 'w'});
model.result('pg1').feature('surf1').feature('def').set('descr'[native2unicode(hex2dec('4f4d'), 'Cp1252'' native2unicode(hex2dec('79fb'), 'Cp1252'' native2unicode(hex2dec('573a'), 'Cp1252'(' native2unicode(hex2dec('6750'), 'Cp1252'' native2unicode(hex2dec('6599'), 'Cp1252'' native2unicode(hex2dec('6846'), 'Cp1252'' native2unicode(hex2dec('67b6'), 'Cp1252'')']);
 
model.sol('sol1').runAll;
 
model.result('pg1').run;
mphplot(model, 'pg1');
    最后的mphplot函数的作用是在Matlab的Figure中显示分析结果,如下所示:
 
问题:最终显示结果默认是Von Mises应力的云图,如何设置单独显示变形的云图?结果数据如何导出?
 




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
电磁波问题中金属的建模Modeling Metallic Objects in Wave Electromagnetics Problems | COMSOL Blog
A..:: CAE专区 ::..
MATLAB字符串转换函数
Unity 3D如何根据类型查找项目中所有的Asset
关于matlab安装后无法与.m、.mat、.fig文件之类关联解决方案
matlab读入mat数据时,将struct型,再变成double型,顺利读入
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服