打开APP
userphoto
未登录

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

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

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

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

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

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

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

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

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

单元结构图:

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

创建过程如下:

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

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

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


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

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

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

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

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

(2)对象树

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Composite组合模式
设计模式学习笔记(十五)——结构型模式总结
设计模式中,属于结构型模式的有哪些?
树形结构的处理——组合模式(二)
C#设计模式-组合模式(Composite Pattern)
组合模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服