首页/文章/ 详情

FEM之在求解器中使用设计模式(3)---Composite模式

4年前浏览1856

在求解有限元模型中会碰到这种情况:

1. 一个模型有多种单元类型(比如同时存在2维单元和3维单元,2维单元又同时存在三角单元和四边形,3维单元同时存在四面体和六面体)

2. 仿真流程有多种工况,每种工况又有多个步骤,每个步骤对应的有限元模型不同

3. 一个模型有多个相同或者类似的子结构,而且子结构存在嵌套情况。


对于第一种情况,一般的做法就是将所有单元循环,判断单元类型,根据单元类型做相应处理。如果单元类型少该方法有可行性,但是当单元类型不确定,而且数量过多,使用该方法代码不仅结构累赘,难以扩展而且层次不清,封装性差。



利用Composite模式可以很好解决这个问题:

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。(Composite使得用户对单个单元组合单元的使用具有一致性)。

单元结构图:

假设FE模型中同时存在4种单元:梁,杆,四面体Shell,MPC单元

创建过程如下:

按照如上建立结构后,代码实现了如下的树形结构:

使用Composite模式后,对于调用者来说可以很清楚的看到单元类型的层次结构,由于所有单元类型接口相同,建立好此结构后,调用者可以很方便的添加,删除,查询,组合,管理任意多种类型的单元(比如添加新的类型单元,调用者只需准确定义好单元类型,实现新单元类型的接口,而不用理会有限元模型object的操作)

针对第三个问题,以集束炸弹FE模型建模为例:


假设一个集束炸弹有三个炸弹,每个炸弹有若干子炸弹,每个子炸弹又有多个子炸弹

对于使用者来说,即可以把三个炸弹看做一个炸弹,也可以把任意一个炸弹的子多个子炸弹看做一个炸弹组合。利用Composite在建模的时候解决了子炸弹之间的递归组合问题。


(1)Composite(组合)模式的目的

组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。

实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样一来,客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。

(2)对象树

通常,组合模式会组合出树形结构来,组成这个树形结构所使用的多个组件对象,就自然的形成了对象树。

这也意味着凡是可以使用对象树来描述或操作的功能,都可以考虑使用组合模式,比如读取XML文件,或是对语句进行语法解析等。


---------------------------------------------------------------------------------------------

版权声明:

原创文章,来源多物理场仿真技术,本文已经授权,欢迎分享,如需转载请联系作者。


代码&命令仿真体系网格处理求解技术
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-11-19
最近编辑:4年前
多物理场仿真技术
www.cae-sim.com
获赞 126粉丝 322文章 220课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈