• 回答数

    13

  • 浏览数

    5836

  • 收藏数

    0

作者:饿货不傻 发表于 2018-12-7 14:25:44
跳转到指定楼层
我需要利用循环程序自行设置内部场域分布、边界条件设置、求解等过程,但是由于外边界编号也会随之改变,所以无法实现循环编程。请问有没有固定边界编号的方法,或是其他解决办法?

这个问题已经困惑很久了,

分享:
回复

使用道具

该用户从未签到

新手上路

Rank: 1

积分
43
极客币
112
主题
15
帖子
51
注册时间
2018-10-19
在线时间
3 小时
性别
保密
发表于 2018-12-7 14:25:53 | 显示全部楼层
只要你能将场域分布设置为一个数值,边界条件也设置为固定值,将值作为变量,然后在循环前修改变量,重新求解即可
这和你修改边界编号可能是不同的思路,可以考虑一下
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
54
极客币
138
主题
16
帖子
69
注册时间
2018-10-19
在线时间
3 小时
性别
保密
 楼主| 发表于 2018-12-7 14:26:03 | 显示全部楼层
楼上的意思是将场域分布,和边界条件都看作变量吗?

因为我用的是一个圆形场域,16个电极均匀分布于场域周围,分别给相邻电极电流激励,相邻电压测量,循环16次激励测量为一组数据;我需要设置在场域内变换物体分布(包括物体的位置、大小),以求得不同的解。

楼上的能否说得更具体些?

谢谢啦!
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
43
极客币
112
主题
15
帖子
51
注册时间
2018-10-19
在线时间
3 小时
性别
保密
发表于 2018-12-7 14:26:10 | 显示全部楼层
物体的大小也变?大小变的话,模型也要重新建了。如果物体大小不变,只是每个循环内对相邻电极电流激励的话,可以给16个电极都各自加个激励,比如x1....x16,然后在每个循环n内,依次使xn,x_n+1的值为你想要的值,其余激励值为0,依次循环就可以了,当然需要将模型导出为.m文件,然后外加循环,最好在matlab中做
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
54
极客币
138
主题
16
帖子
69
注册时间
2018-10-19
在线时间
3 小时
性别
保密
 楼主| 发表于 2018-12-7 14:26:30 | 显示全部楼层
楼上说,将场域分布设置为一个数值,边界条件也设置为固定值,将值作为变量,然后在循环前修改变量,当内部物体位置改变时,不太清楚怎么具体实现的,能否具体说明一下。
不太明白,谢谢啦!
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
43
极客币
112
主题
15
帖子
51
注册时间
2018-10-19
在线时间
3 小时
性别
保密
发表于 2018-12-7 14:26:37 | 显示全部楼层
你先看看matlab与comsol的联合的例子吧
链接如下:
http://bbs.simol.cn/thread-17547-1-1.html
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
54
极客币
138
主题
16
帖子
69
注册时间
2018-10-19
在线时间
3 小时
性别
保密
 楼主| 发表于 2018-12-7 14:26:50 | 显示全部楼层

我一直用的都是matlab循环程序,只是一旦场域内部物体位置改变,边界编号也改变了,导致程序无法顺利进行。因为需要实现物体动态变化,所以想请教有没有什么解决方案?

谢谢哦!
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
43
极客币
112
主题
15
帖子
51
注册时间
2018-10-19
在线时间
3 小时
性别
保密
发表于 2018-12-7 14:27:01 | 显示全部楼层
你是要考虑物体的运动效应么?瞬态分析?
最好把你的问题描述清楚,配上图说明
现在信息根本不对称,我说我的,你说你的
对解决问题没有任何帮助
楼主不觉得是这样么?
对问题清楚的描述,虽然可能你当时多花了点时间,但得到好处确实很多的
要知道其他人并不是都对你的问题很清楚,如果你自己把问题都不能很好的描述,那更别期望别人能给你什么帮助了
毕竟别人只能给你一个思路,我觉得我的思路应该是比较清楚了,也有人提了ALE运动网格的解决方法
但这些都有相应的应用背景,虽然大家一股脑把解决思路都提出,你不还是一头雾水么?
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
54
极客币
138
主题
16
帖子
69
注册时间
2018-10-19
在线时间
3 小时
性别
保密
 楼主| 发表于 2018-12-7 14:30:25 | 显示全部楼层
下图是场域分布图,场域周围均匀分布16个电极,内部有一个圆形物体做自由运动:

其激励测量激励如下图所示,相邻电极电流激励相邻电极电压测量,即1-2电极电流激励(1电极输入电流,2电极接地,其他电极浮空),获取2-3,3-4,...,14-15,15-16,16-1电极对电压差,如下图所示。依次循环,2-3激励,...,15-16,16-1激励。

由于内部圆形物体位置,或者半径大小改变,都会导致边界编号变化,循环出现问题。下面是我用的matlab循环部分程序:

% Geometry
% Import CAD data
garr = geomimport('F:\Program\Comsol_Pro\2009.4.1kalman\model1.mphbin');
[g1,g2,g3]=deal(garr{:});
g3=rotate(g3,0.5235987755982988,[0,0]);  %%%%%%%%%%%%%%%%%%%%%%  物体旋转角度任意设定  
% Analyzed geometry
clear s
s.objs={g1,g2,g3};
s.name={'CO1','CO2','CO3'};
s.tags={'g1','g2','g3'};
fem.draw=struct('s',s);
fem.geom=geomcsg(fem);
% Initialize mesh
fem.mesh=meshinit(fem, ...
                  'hauto',5);
% (Default values are not included)

A=[74 80 78 71 65 57 51 45 38 33 34 43 49 55 62 68];%%%%  16个电极编号 %%%%变换物体位置时会发生变化????
for i=1:16    %%%%%%%%%%%% 设置16次循环激励 %%%%%%%%%%%%%
    L=16;       % The number of electrodes.%%%%%%%%%%%%%%%%%%%%%%%%%%%
    [T]=Currenteit(L,'adj'); %%%%%%%%% 调用激励模式子程序 %%%%%%%%%%%%%%%%%%
    T(find(T==1))=3;%%%%%%%%% 设置电极电流激励 %%%%%%%%%%%%%5
    T(find(T==-1))=4;%%%%%%%% 设置电极接地 %%%%%%%%
    T(find(T==0))=1;%%%%%%%%% 设置电极浮空 %%%%%%%%%%55
clear appl
appl.mode.class = 'EmConductiveMediaDC';
appl.module = 'ACDC';
appl.assignsuffix = '_emdc';
clear bnd
bnd.Jn = {0,0,1,0};
bnd.type = {'nJ0','cont','nJ','V0'};
bnd.ind = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ...             %%%%变换物体位置时,有些边界变为内部边界或内部变为外部,导致设置不成立?????
  1,1,1,1,2,1,1,1,2,2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,2,1,2,1,1, ...
  1,2,1,2,1,1,1,2,3,2,1,1,1,2,4];
bnd.ind(A()=T(:,i); %%%%%%  设置电极激励条件  %%%%%%%%%
appl.bnd = bnd;
clear equ
equ.sigma = {5.99e7,80,1};
equ.ind = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3];
appl.equ = equ;
fem.appl{1} = appl;
fem.frame = {'ref'};
fem.border = 1;
clear units;
units.basesystem = 'SI';
fem.units = units;
% ODE Settings
clear ode
clear units;
units.basesystem = 'SI';
ode.units = units;
fem.ode=ode;
% Multiphysics
fem=multiphysics(fem);
% Extend mesh
fem.xmesh=meshextend(fem);
% Solve problem
fem.sol=femstatic(fem, ...
                  'solcomp',{'V'}, ...
                  'outcomp',{'V'});
% Save current fem structure for restart purposes
fem0=fem;
for j=1:16%%%%%%%%%%%%%%%%%导出电极电压值%%%%%%%%%%%%%%%%%%%5
    I1(i,j)=postint(fem,'V', ...          %potenital on each electrode
           'unit','V*m', ...
           'dl',[A(j)], ...
           'edim',1);
end
    I1(i,17)=postint(fem,'V', ...
           'unit','V*m', ...
           'dl',[A(1)], ...
           'edim',1);
end

不知问题交代清楚了吗?
请多多指教!

回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
43
极客币
112
主题
15
帖子
51
注册时间
2018-10-19
在线时间
3 小时
性别
保密
发表于 2018-12-7 14:30:38 | 显示全部楼层
按照你的说法,是想做瞬态分析?是想研究当电极激励在不断循环过程中,中间物体的运动情况?但你是用循环实现,中间不涉及任何时间,似乎是静态分析?
你好像是改变模型的结构来做循环的?
其实你可以用ALE方法,也就是在multiphysics下面的deform mesh,下有个moving mesh(ALE),添加这个以后,里面的物体你可以设置为自由运动,周围电极设置为静止,这样周围电极的边界条件编号就不会变了
回复

使用道具 举报

12下一页
高级模式 评论
您需要登录后才可以回帖 登录 | 立即注册 微信登录
关于作者
饿货不傻

用户组:新手上路

  • 主题

    16

  • 帖子

    69

  • 关注者

    1