对于一般的常规项目而言,平立剖面图加上与建筑师适当的沟通,就足够作为结构模型建立的背景资料。但是当收到图1这样的建筑平面图提资的时候,小编的内心是懵逼的,这明明就是地形图么~深深的无力感~~~好歹来个三维的模型啊~~~
于是,建筑大大给了一个图2这样的Rhino模型,还是无力感,真的就是一个一个的小山包,这么妖娆的造型,常规思路哪里搞的定?!看上去得走非常规路线,得上非常规技能了~~~
STEP1 Rhino→CAD
图1
图2
这么难想,索性就不想了,上个小网放松放松心情吧,说不定上着上着灵感就来了。。。灵感就来了。。。上网一不小心看到了下面这几张图,灵感就真的来了。
要么做个单层网壳?那根据建筑甩给我的这个Rhino模型可不行,怎么的也得给个线型网格的模型吧,建筑大大给的Rhino都是曲面啊,我的单层网壳都是杆件啊,建模都是要线单元的呀,我要的线呢?线呢?怎么从rhino里面搞出来单层网壳建模要的线呢?线搞出来了又要怎么算?!!
难也得琢磨呀,Rhino不会也得学啊,这么大的平面要画n多线呀,这么多的线要Rhino画出来也是挺难的呀,有什么办法能瞬间把这么多线画出来啊?这回是度娘给了我灵感~好像可以用Grasshopper么~~~
Grasshopper(简称GH)是一款在Rhino环境下运行的采用程序算法生成模型的插件,是目前设计类专业参数化设计方向的入门软件。GH的最大的特点是可以向计算机下达更加高级复杂的逻辑建模指令,使计算机根据拟定的算法自动生成模型结果。通过编写建模逻辑算法,机械性的重复操作可被计算机的循环运算取代;同时设计师可以向设计模型植入更加丰富的生成逻辑。无论在建模速度还是在水平上照传统工作模式相比,都有较大幅度的提升。
就用它了吧,Grasshopper也算是参数化建模的概念,虽然可视化,也算是编程~和建筑大大讨论了一下,好像有点思路了。
第一步,在平面上划分网格
第二步,将平面上的网格投影至空间曲面
第三步,将投影至曲面上的曲线修改为直线
第四步,选择得到的空间网格,导出成为CAD文件。
就这张折腾出了个Grasshopper的电池(图3),简单是简单吧,线型模型是搞出来了(图4,图5)~~~
图3
图4
图5
STEP2 CAD→SAP2000
Rhino的曲面转成了CAD的曲面。。。那要用什么什么软件模拟呢?!Sap2000?Midas gen?当考虑到分析过程中碰到的几个问题时,我还是毅然地选择了Sap2000,原因很简单,sap2000能够进行api二次开发。
Sap2000有一个优势,就是它是基于面向对象技术开发的,而且接口开放。使用者既可以利于软件提供的图形操作界面来建筑和分析,也可以通过编程连接其接口来建模分析。前者的优势是非常直观,适合小体量的结构,而后者对于大型结构非常有效,可以减少很多工作量。
Sap2000的API接口支持多种语言,包括VBA, VB, VC#, VC++,Fortran, Matlab。其中最为好用的莫过于VBA,因为VBA可以直接通过宏与Microsoft Word和Excel连接,而Excel中又提供了很多可以直接在单元格中操作的简易函数,将单元格、函数、VBA、SAP2000结合使用,可以实现用户的很多需求。相比之下,Visual Studio的开发方式下,显示数据和计算就没有Excel那样方便直观,想显示图形界面还要操作很多控件增加了工作量。Matlab的使用不像Excel那样普及,数据显示同样没有Excel直观。
第一个问题是网壳面单元活荷载加载。
荷载规范规定的不上人屋面活荷载取值0.5kN/m2(投影荷载),要是面单元法向量和水平面垂直自然不用处理,但是这个曲面上的面单元法向量并不都垂直于水平面,所以施加的活荷载需要按照面单元投影面积与面单元实际面积的比值进行换算。
数以千计的面单元,难道我们要每个面单元都要处理过去吗?!工作量还是异常巨大的,是时候祭出Sap2000的api这个大杀器了。
其实这个程序的计算过程并不复杂(图6):
第一步,计算面单元的面积A1。
读取每个面单元的节点→根据每个面单元的节点计算每个面单元的边长→根据三角形的边长计算面单元的面积
第二步,计算面单元的投影面积A2。
读取每个面单元的节点→将节点的z轴坐标统一→根据相同z坐标节点计算每个面单元的边长→根据三角形的边长计算面单元的投影面积
图6
第三步,计算面积比,换算活荷载,并利用api函数将其赋予到每个面单元。
只需要很简单的Api操作,再加上简单的运算,这个施加活荷载的过程就算大功告成了。效果可见图7,赋予的活荷载值随着屋面曲率的变化而变化。
图7
第二个问题就是就是网壳线单元的局部坐标轴的问题了。
这个曲面非常自由奔放,完全不按照传统的规则单层网壳的套路。网壳里面的构件也自然无法按照套路里面的受压构件工作了。大部分还是受弯构件,圆形截面在这时似乎就不是那么的有效了,只能乖乖用矩形截面了~
那么问题来了,貌似从CAD导入Sap2000的线单元的局部坐标轴并不能符合我们的计算要求。在Sap2000中点、线、面等单元都有局部坐标系,且用了三种颜色 (红绿蓝)来表示其局部坐标。其中红色—-1轴、绿色—-2轴、蓝色—-3轴。在将线型的dxf文件导入Sap2000时,默认梁单元的3轴与水平面平行。看看图8就明白了!
图8
看看图9,杆件的2轴是随建筑外皮曲面的法向量而变化的,要不然丑不说,杆单元两侧的面单元的连接节点也不好做哇!所以网壳杆件的局部坐标轴还是要均分一下和它相邻的两个面之间的夹角~
图9
话虽如此,要把每根杆件要转动的角度计算出来,靠手算?有点像天方夜谭啊,还是数以千计的杆,还是数以千计的面,怎么算?同样的配方,同样的味道,Api吧。只是这次还得重新把我的高数书拿出来重新温习一遍。。。正所谓少壮不努力,老大学高数。什么向量了,什么右手定则了,统统重新学起来。。。
图10
高数学完也没用,程序什么的还是要写起来的。为了写篇公众号整理个流程图,如图11。来看看成果(图12,图13)。
图11
图12
图13
以上这两项工作做完,基本上告别繁重的体力劳动,想想可以愉悦地用Sap2000做分析吧。。。但是,还是太年轻了。用Sap2000做后屈曲分析?!呵呵哒!!!你咋用sap2000同时考虑材料+几何非线性?!塑性铰定义材料非线性?试着跑了一个,做到一半软件就罢工了~只能上高阶选手了。
STEP3 SAP2000→ABAQUS
市面上的ABAQUS接口还是很多滴,但是无奈要么就是收费的,要么就是效果达不到计算要求的,试了好多都不尽如人意(其实是我穷,买不起)。索性自己用python编一个吧。抱着几本ABAQUS官方的manual,写下来也算收货颇丰。
过程用一句话就能概括,就是把Sap2000的s2k文件转换成ABAQUS的inp文件。但是有几个特别要注意的点还是希望和大家分享。
1)梁单元的局部坐标轴无法再cae界面定义,需要在提交inp文件时借助inp文件完成。
2)质量的定义。有的资料说在ABAQUS中定义附加质量要通过附加质量单元。。。拜托,还可以其他方式好不了。。。个人总结了三种定义质量的方法:
①mass 通过点定义附加质量 ABAQUS analysis user‘s manual 30.1.1
②density 通过密度定义质量ABAQUS analysis user‘s manual 21.2.1
③nonstructural mass 通过构件定义质量 分为线单元,面单元和实体单元不同定义ABAQUS analysis user‘s manual 2.7.1
3)释放约束,定义铰接,需要运用*release关键字,也无法直接通过cae界面定义,需要在inp文件中操作。
接口的验证还是要通过周期振型。图14及图15分别是ABAQUS及sap2000模态分析的结果,误差还可以。图16至图22为sap2000与ABAQUS前三阶模态。结果还是吻合的,不枉我学了这么多年的python啊。。。
图14
图15
图16
图17
图18
图19
图20
图21
还没看过瘾是吧,甲方爸爸催图的小皮鞭又抽起来了,只能继续吭哧吭哧去画图了,就先到这里吧。
总结
由于没有类似项目的经验,这个项目做得也是相当纠结的,想各种方法,各种从无到有。有这么几点体会吧~
1)不能只沉迷于YJK,PKPM而不能自拔。譬如Rhino,这不单单是建筑专业的专利。
2)本文碰到的问题运用到了Rhino参数化建模,Sap2000的Api技术以及python编程技术,遇到简单重复工作量异常巨大的工作时,这些方法都能节省很多的工作量。
希望本文对诸位有所启发,不足之处,还请批评指正。