Development of Revit_Abaqus Structural Model Conversion Interface
-
摘要: 本文针对有限元模型设计分析软件Abaqus建模工作效率低下的问题, 提出了开发Revit-Abaqus结构模型转换接口的方法。根据Autodesk公司提供的Revit API可定制化技术, 本文通过C#编程语言对Revit与Abaqus转换接口进行研究。通过提取Revit结构物理模型与结构分析模型数据, 整理为Abaqus可运行的Python脚本, 实现了将模型从Revit转换到Abaqus软件中, 提高了建模与计算分析的效率。
-
关键词:
- Revit-Abaqus转换接口 /
- RevitAPI /
- 二次开发 /
- 结构分析
Abstract: Aiming at the low efficiency of finite element model design and analysis software Abaqus, this article proposes a method of developing Revit-Abaqus structure model conversion interface. According to the Revit API customization technology provided by Autodesk, this article studies the conversion interface between Revit and Abaqus by C # programming language. By extracting the data of Revit structural physical model and structural analysis model, a runnable Python script is organized for Abaqus, and the model can be transformed from Revit to Abaqus, which improves the efficiency of modeling and calculation analysis. -
引言
Revit在BIM技术的发展过程中起着重要的作用,对比传统建筑设计有着协作、数据共享和信息化的特点,不再像传统二维设计串行式作业,而是使各生产阶段相互联系转变为并行式作业[1],其超强的互动控制功能,将平面、立体、剖面及明细表等双向联系,一点改动,处处更改,有效减少设计错漏。许多行业实践表明,Revit设计可有效节约生产成本,减少设计变更,提高施工效率。
Revit API是Autodesk公司让Revit能更好地解决用户需要而提供的二次开发接口。已经有不少的开发人员成功地通过Revit API开发Revit与第三方软件的接口。到目前为止,已经能够实现Revit与PKPM、ANSYS、STAAD.Pro、YJK、Bently等软件的模型数据的双向导入和增量更新[2-6]。宋杰[1]提供了一个利用Revit和Revit API技术进行的模板转化方式,使用C#编程语言实现了二次开发,将由Revit所获得的数据结果整合为ANSYS APDL命令流格式,以此完成Revit-ANSYS模式的直接转化。秀保娟[8]通过调用Revit API获得Revit建模数据信息、并在PKPM中建立了Revit模块,研发了Revit-PKPM双向接口软件。王玄玄[9]运用Revit API转换接口,提取数据最终生成Abaqus可识别的INP文件,实现了Revit中复杂结构模型导入Abaqus进行精确的结构计算分析。
Abaqus被普遍认为是有限元软件操作系统,有助于解析复杂的固态力学构件或流体力学体系,尤其有助于驾驭超大规模、高复杂度问题并解决高度不确定性问题。Abaqus与建模功能强大的软件Revit的接口目前只能够实现结构物理模型从Revit到Abaqus的转换,但对于进行计算分析的约束条件与荷载工况信息的转换研究较少。本文将结合Revit强大的建模功能与Abaqus先进的非线性有限元分析功能进行二次开发,将Revit结构物理与分析模型完整导入Abaqus,实现更精确的复杂构造计算分析。
1. 开发思路
1.1 ACIS模型转换方式
对于Revit模型,在Abaqus中重建模型可通过ACIS的模型转换方式,ACIS是Abaqus软件和Revit软件共同支持的三维几何造型引擎,两者基于此都支持.sat文件的导入和导出,理论上这就为Revit-Abaqus模型转换提供了便捷的接口。但这种方式有以下三方面问题:一是.sat文件只存储结构的几何模型,目前也仅支持以part形式导入Abaqus,因此还需在Abaqus中手动完成材料指派、楼层装配、设置时间步、构件连接、施加荷载及网格划分等步骤;二是导入的模型是一个完整闭合的几何图形,不能直接进行单元网格划分,需要手动切割出单元几何形状,且需要修复填补才能划分出高质量并计算精确的网格;三是通过.sat文件导入可能出现几何数据的丢失或者转换不彻底的情况。
因此基于ACIS的转换方式效果并不理想。本文将对Revit-Abaqus进行二次开发,实现将Revit结构物理模型与结构分析模型数据完整导入Abaqus,无需手动完成part后步骤,一次性导入模型数据完成计算分析。
1.2 Abaqus建模与转换分析
Abaqus有着多种建模的方式:
(1) CAE:在Abaqus中新建CAE直接建模是基本的建模方法,但人工操作工作量大,不能实现自动化,不能实现从Revit直接转入;
(2) 直接填写Keyword文件:写Keyword工作量较大,除非很多相同的部分,简单的装配;
(3) Python script: Python脚本语言简单易懂,并且Abaqus软件中自带的脚本录入开发工具能够读取大量脚本代号,再经过修改与合并,就可以进行Python脚本编辑。还可以把研究变量设定成Python脚本中的函数自变量,建立参数化模型设计脚本,通过修改关键参数即可修改研究变量,可实现对单一因素变化快速模型分析计算的目标[10]。因此本文将采用Python script方式对Revit与Abaqus进行二次开发。
1.3 Revit-Abaqus转换接口开发思路
在结构设计完成后的Revit模型中包括结构物理模型和结构分析模型数据,其中物理模型数据包含几何尺寸、材质信息、楼层信息等;结构分析数据包含荷载工况、构件两端约束、边界条件信息等。两者都是Abaqus建模并完成计算分析所必不可少的,其在Revit与Abaqus中的模型信息对照如表 1所示。
表 1 Revit与Abaqus模型信息对照Revit模型可提取数据 Python脚本对应步骤 构件坐标,几何尺寸
材料,截面参数
位置信息Part
property
Assembly边界条件
荷载信息Interaction
load基于前面对Abaqus建模方式的讨论,如何将Revit模型数据完整的导出、进而在Abaqus中生成模型并计算是要解决的问题。由表 1可知,Revit可直接获取的数据与Abaqus通过编写Python脚本建模完成计算分析所必需的大量数据吻合,适宜于利用二次开发技术手段来进行数据的提取和转存。因此对于RevitAbaqus转换接口开发, 本文的开发思路是:基于Visual Studio2017平台,利用运行在.NET平台下的C#编程语言调用Revit API接口进行二次开发形成.dll文件,并以插件的形式载入到Revit的附加模块中[11]运行,提取Revit模型的空间坐标、几何尺寸、材料及材料的密度、泊松比、杨氏模量、荷载位置与大小等信息提取出来,将信息整理好,再写成一个Abaqus可以直接运行的从建模到计算的完整Python script。
2. 模型转换接口开发
2.1 开发流程
程序首先对Revit所有的图元进行筛选,判断是否为某一族类型,将其按照族类型收集并储存起来,遍历集合,按照楼层标高过滤,自下而上将每层族实例的几何信息、材质信息、楼层信息及荷载信息提取出并赋予相应编号后储存,将所有的数据整理输出一个可以使Abaqus运行的Python脚本,模型转换接口实现流程如图 1所示。
2.2 模型转换程序
模型转换到Abaqus主要分为两部分:一部分是建模,一部分是执行模型。对应的程序代码也分为两部分:一是提取Revit模型信息的代码,二是输出为Abaqus可运行的Python脚本的代码。
为了便于建模以及避免梁柱板节点处的问题,本文主要采用梁壳单元在Abaqus中建模,梁,柱采用梁单元,板采用壳单元,以简单二层框架为例,
实现程序如下:
Foreach (Element beam in beamclass)
{
XYZ directionvector ← positionline.Direcation; // 获取梁定位线坐标
Definition section ← sectionproperty.Definition; // 获取梁截面尺寸
Material characteristic ← beam as Material; // 获取材料属性
Lineload beamload ← beam. Lineload; // 获取梁上线荷载
}
s.Spot(point ← (locationlineX,locationlineY)); // 以梁定位线坐标建模
mdb.models.materials.Density(table ← density)El;
astic(table ← ((elasticity,position) ISelectionFilter floorselFilter ← new FloorSelectionFilter(); // 材料指派
Foreach(Reference floor in floorselFilter)
{
BoundingBoxXYZfloorXYZ ← floor_1.get_BoundingBox(doc.ActiveView); // 获取板顶点坐标
Material floormaterial ← floor as Material; // 获取材料属性
Areaload floorload ← floor.Areaload; // 获取板上面荷载
}
s.Spot(point ← (locationlineX,locationlineY));
mdb.models.materials.Density(table ← density) Elastic(table ← ((elasticity,position);
a.translate(instanceList ← (beam-column-floor),vector ← (X,Y,Z));
mdb.models[‘Model-1’].Tie(beam-column-floor);
mdb.models[‘ Model-1’].Load(beam-columnfloor);
2.3 模型转换要点
2.3.1 几何模型与part建模步骤数据转换
基于Revit“点—线—面—体”的建模方式,分别针对Abaqus采用的梁、壳单元,获取梁柱定位线两端坐标、楼板各角点坐标,根据Abaqus中梁单元的横截面库赋予构件截面属性,再赋予板厚度,在Abaqus完成建模。以筛选出OST_Structural Framing族为例,以下代码实现了梁的模型信息提取与在Abaqus中建模:
LocationCurve beamlocationcurve ← beam as LocationCurve; // 获取梁定位线坐标
double.TryParse(beamsectio,out beamsection); // 获取梁截面尺寸
s.Line(point1 ← (point1,point1Y),point2 ← (point2X,point2Y))); // 以梁定位线坐标建模
2.3.2 材料截面信息与property材料指派步骤数据转换
根据Abaqus结构分析过程中对材料物理特性的需要,获取Revit结构物理模型中材料名称、材料密度、泊松比及杨氏模量等,在Abaqus建立material并指派给对应特性构件,以筛选出OST_Structural Framing族为例,以下代码实现了梁的材质信息提取与在Abaqus中完成材料指派:
Material bmat ← beam as Material; // 获取材料
ElementId beamad ← bmat.StructuralAssetId; // 获取结构材料编号
mdb.models[‘ Model’].materials[‘ liang]. Density(table ← (density)); // 材料指派
mdb.models[‘ Model’].materials[‘ liang]. Elastic(table ← (elasticity,position)); // 材料指派
2.3.3 模型位置与Assembly楼层组装步骤数据转换
根据Revit模型楼层标高以及构件位置坐标利用平移,旋转等功能在Abaqus中完成装配。以筛选出的OST_Structural Framing族为例,以下代码实现了梁在楼层中的装配:
Element element←collector.Of Class(typeof(Level))First Element(); //获取梁所在楼层
a.translate(instance List←(‘liang), vector←(0, 0, levelj)); //平移操作
2.3.4 边界条件与Interacation构件连接步骤数据转换
一般默认构件之间为刚接,Abaqus中梁柱间利用merge功能使其成为一个part解决“梁—梁”、“梁—柱”、“柱—柱”刚接方式,板与梁柱间采用tie连接的方式,以筛选出的OST_Structural Framing族为例,以下代码实现了梁之间的连接:
Element element a.InstanceFromBooleanMerge
(name ← beam,instances =column); // 梁柱完成刚接
region1 ← a.instances[floor].surfaces[surface]. sets[beam]; // 板与梁柱刚接
2.3.5 荷载工况数据与load构件施加荷载步骤数据转换
Revit模型荷载包括节点荷载、梁上线荷载、板上面荷载以及结构自重,提取各构件作用荷载,在Abaqus中采用施加位移与力的方式完成荷载的施加,以筛选出的OST_Structural Framing族为例,以下代码实现了获取梁上线荷载以及在Abaqus中给梁施加荷载:
if (Math.Abs(liangmax X-lmax X) < 1 & & Math.Abs(liangmax Y-lmax Y) < 1 & & Math.Abs(liangmin X-lmin X) < 1 & & Math.Abs(liangmin Y-lmin Y) < 1 & & (liangmax Z←lmin Z));
liangload[m]←ll Fz; //根据荷载作用边界条件判断并获取梁上线荷载
mdb.models[‘Model-1’].Line Load(name=Load, create Step Name=’Step1’region=region, comp3←beamload); //给梁施加线荷载
2.3.6 划分网格
以下代码实现在Abaqus中对模型进行网格划分:
p. s e e d P a r t (s i z e = s i z e,deviationFactor=deviationFactor,minSizeFactor=minSizeFactor);
按照以上程序完成Revit与Abaqus转换接口开发,实现快速将Revit模型在Abaqus中建模、装配及施加荷载,最后进行计算分析。
3. 案例验证
以某6层2跨框架结构建筑为例,梁柱采用C35混凝土板采用C40混凝土,板厚为100mm,考虑结构自重、梁上承受线荷载、板承受面荷载,验证Revit数据信息导入Abaqus后模型的完整性以及是否存在偏差。在Revit中运行程序,选中该模型,最后生成Python脚本,脚本部分信息如图 2所示。
将生成的文本导入Abaqus,按照文本内容,由柱、梁、板的顺序依次建立part,如图 3所示。该框架建筑包含36根柱、42根梁、12块板,导入Abaqus后生成分析模型用时6秒,转换程序效率高,在模型构件数目、信息以及构件材质方面都与Revit模型吻合,结果显示,本文开发的接口程序实现模型转换的算法准确可靠。
将梁柱板按照Revit位置信息通过移动、阵列、旋转和平移等操作装配成框架模型。在Abaqus的Interaction步骤中处理梁柱板节点连接问题,然后再依据《建筑结构荷载规范》计算出的梁上线荷载与板上面荷载施加到模型上,划分网格,最后进行计算分析。从建模到完成计算分析完成过程如图 4所示,网格详细划分图以及模型计算应力云图分别如图 5~6所示。
本例通过转换接口将Revit物理模型及结构荷载信息提取后导入Abaqus,进行模型建立、材质指派、楼层装配、节点连接、施加约束与荷载、单元网格划分,最后完成计算等一系列操作,验证了转换接口在Revit中的模型与导入后Abaqus中模型完整一致性。
4. 结论
本文针对Revit软件结构三维可视化、参数化的优点与其计算分析功能的不足,Abaqus软件复杂异形模型建模耗时,低效率的不足与其强大的有限元计算分析功能的优势,结合二者优点,提出Revit-Abaqus模型数据转换接口开发思路并进行开发实践,大大提高Revit在结构设计过程进行复杂结构分析的效率,对于反复修改模型重新建模进行计算分析的项目效果尤为显著。
本文基于Visual Studio2017平台,借助C#, Python语言,调用Revit API接口,实现了Revit软件模型数据完整一致的导入Abaqus,通过给出程序开发的详细过程与算法要点与实例验证,表明了基于RevitAbaqus转换接口,可以大大减少建模时间,将Revit中模型的物理与几何信息完整无误的导入到Abaqus中完成计算分析,整个过程无需人工参与修改,具有较大的实用价值,但针对Revit-Abaqus模型数据双向导入问题中将完成计算分析的数据返回Revit中并未涉及,之后可以进行更加深入的研究。
-
表 1 Revit与Abaqus模型信息对照
Revit模型可提取数据 Python脚本对应步骤 构件坐标,几何尺寸
材料,截面参数
位置信息Part
property
Assembly边界条件
荷载信息Interaction
load -
[1] Holness Gordon V.R. . BIM building information modeling: Gaining momentum [J]. ASHRAE Journal, 2008(06): 28-30+32+34+36+38-40.
[2] PKPM与Revit实现双向数据互连进一步推动中国BIM技术的普及[J]. 土木建筑工程信息技术, 2013, 5(04): 6. [3] 赵晓宇, 陈子晗, 余思令, 等. 基于Revit与ANSYS的模型转换自动化研究[J]. 长江信息通信, 2021, 34(01): 119-121. https://www.cnki.com.cn/Article/CJFDTOTAL-HBYD202101039.htm [4] 严旭, 范盛颖, 周进. Revit到STAAD. Pro的模型数据转换研究[J]. 土木建筑工程信息技术, 2017, 9(03): 104-109. DOI: 10.16670/j.cnki.cn11-5823/tu.2017.03.18 [5] 杨平. Revit Structure转盈建科软件的数据分析与研究[J]. 福建建筑, 2015(08): 126-128. https://www.cnki.com.cn/Article/CJFDTOTAL-FJJZ201508042.htm [6] 蓝天宇. BIM技术在建筑工程结构设计阶段的应用研究[D]. 华东交通大学, 2019. [7] 宋杰, 张亚栋, 王孟进, 等. Revit与ANSYS结构模型转换接口研究[J]. 土木工程与管理学报, 2016, 33(01): 79-84. https://www.cnki.com.cn/Article/CJFDTOTAL-WHCJ201601013.htm [8] 乔保娟, 邓正贤, 张洪磊. PKPM与Revit接口软件中若干问题探讨[J]. 土木建筑工程信息技术, 2014, 6(01): 113-117. http://tmjzgcxxjs.manuscripts.cn/article/id/b0de20ec-bebe-414e-8736-e4e7106548bd [9] 王玄玄, 黄玉林, 赵金城, 等. Revit-Abaqus模型转换接口的开发与应用[J]. 上海交通大学学报, 2020, 54(02): 135-143. https://www.cnki.com.cn/Article/CJFDTOTAL-SHJT202002006.htm [10] 庞芝炯. 基于Python脚本的ABAQUS参数化建模方法[J]. 城市建设理论研究, 2014, (09): 1-2. [11] 王维轩, 周东明. 基于Revit平台二次开发模式的研究[J]. 土木建筑工程信息技术, 2019, 11(01): 132-136. DOI: 10.16670/j.cnki.cn11-5823/tu.2019.01.19 -
期刊类型引用(1)
1. 杨成发,刘鸣岐,赵飞,王宁,张育智,杨万理. 桥梁信息模型——有限元模型转换接口研发. 土木建筑工程信息技术. 2024(05): 91-96 . 本站查看
其他类型引用(0)