PC有限元可视化前处理系统开发

2012-07-06 13:02董新玉陈惟珍
黑龙江大学工程学报 2012年3期
关键词:子域对话框预应力

董新玉,陈惟珍

(同济大学 桥梁工程系,上海 200092)

0 引 言

在研究预应力混凝土结构开裂问题时,关心的是结构的局部应力,目前多采用SAP,ANSYS等有限元软件将预应力筋离散为杆单元或索单元,将混凝土离散为实体单元进行分离式分析计算。由于要求预应力筋单元节点通过混凝土单元节点,这给曲线布筋的预应力混凝土结构网格划分带来了很大的困难。文献 [1]针对有粘结预应力混凝土结构,在不考虑预应力筋滑移的前提下,提出采用嵌入模型模拟预应力筋的方法,嵌入模型见图1。该方法在网格划分时,允许预应力筋以任何方式穿过混凝土单元,从理论上解决了预应力混凝土结构网格划分的难题。但是目前没有针对嵌入模型的前处理系统,采用常用的有限元软件进行嵌入模型前处理非常不便。

图1 嵌入模型Fig.1 Embedded model

本文提出了利用Visual C++和OpenGL图形库开发适用于嵌入模型的可视化前处理系统(命名为PC-Pre)的方法。Visual C++是微软公司研发的面向对象的可视化开发工具,包括了综合的微软基本类库(MFC Library),提供有复杂的资源编辑器,这使得开发Widows应用程序变得简单高效。OpenGL是SGI公司开发的一个高性能图形开发软件包。作为图形硬件的软件接口,OpenGL包括了100多个图形操作函数,开发者可以利用这些函数构造景物模型、进行三维图形交互软件的开发。OpenGL已经成为开发可移植、可交互的2D和3D图形应用程序的首选环境[2]。

1 PC-Pre的内容和功能

PC-Pre在进行预应力混凝土结构有限元前处理时具有自身独特的优势,主要内容和功能如下:

1)用户可以在截面库中选择截面类型,然后利用关键截面建立混凝土实体模型。

2)可以建立空间预应力筋模型。

3)根据输入的网格划分控制参数自动对混凝土和预应力筋进行网格划分。

4)具备图形操作功能,提供了10个典型的观察视图,且可对图形进行平移、缩放和旋转操作。

2 PC-Pre的基本原理

2.1 混凝土实体模型建立的基本原理

结构体沿体内某一直线或曲线其断面形式不变,断面尺寸可以不同,称这种结构为单一截面形式结构。对于这类结构可以选取结构的若干关键截面,利用相邻关键截面上对应点的坐标通过线形插值的方法计算相邻关键截面间结构体上点的坐标,即通过选取若干关键截面可以真实还原或近似模拟整个结构体[3]。

2.2 预应力筋模型建立的基本原理

预应力筋线形最复杂的情况为空间曲线,将预应力筋向相互垂直的两个平面内投影,投影线条一般由直线段和圆弧段组成,因此可用分段函数来描述。假设向yoz和xoz平面投影,xoz平面内的投影方程可表示为x(z),yoz平面内的投影方程可表示为y(z),由此可得预应力筋参数方程为:z=z;x=x(z);y=y(z),其中a≦z≦b。

2.3 网格划分的基本原理

2.3.1 混凝土单元划分

关键截面将混凝土实体模型分成若干节段,网格划分时可先将每个节段按相同的方式分割成形状简单、便于网格划分的子域,再对每个子域进行网格划分[4]。根据子域各方向分段数目,利用子域的角点坐标按线性插值的方法可求得单元节点坐标。

2.3.2 混凝土单元节点编号

将第1个单元的所有节点直接编号,后续单元需将其每个节点与所有已经编号的节点进行坐标比较。若单元的某个节点与编号为i的节点坐标相同,则将该单元的这个节点也编号为i;若与所有已经编号的节点的坐标都不相同,则赋予这个节点一个新的编号。

由于网格划分是逐子域进行节点编号,因此最后形成的整体结构的网格节点差与子域个数以及子域编号顺序等因素有关。对于大型复杂的结构,整体结构的网格带宽较大,故需要进行带宽优化。带宽优化的方法参见文献 [5-7]。

2.3.3 预应力筋单元划分

对于嵌入模型,预应力筋单元划分主要包括:计算预应力筋与混凝土单元表面的交点,将相邻交点间的线段作为一个预应力筋单元;计算预应力筋单元所在混凝土单元的编号。

2.3.3.1 预应力筋与混凝土单元表面交点计算

3 PC-Pre的具体实现技术

3.1 数据结构设计

数据结构是计算机存储、组织数据的方式。PC-Pre用到的点、线、面和单元等基本元素可以通过定义数据结构进行表征。

3.1.1 点数据结构

3.1.2 线数据结构

3.1.3 面数据结构

3.1.4 以节点坐标定义单元数据结构

3.1.5 以节点编号定义单元数据结构

数组模板类CArray可以存放任意数据类型,而以其创建的对象能够根据需要动态的增大或缩小。以上数据可以利用数组模板类CArray创建的对象进行存储[8]。定义全局数组如下:

CArray<CPoint,CPoint&>PTS-Node;//节点数组

CArray < CXEleNodeCord,CXEleNode-Cord&>PTS-EleNodeCord;//单元节点坐标数组

CArray < CXEleNodeNum,CXEleNode-Num&>PTS-EleNodeNum;//单元节点编号数组

3.2 建立混凝土实体模型

根据结构的复杂情况和所需的模拟精度可将结构分为若干节段来建立实体模型。节段信息对话框见图2。对话框中节点坐标为该节段端截面局部坐标系原点在整体坐标下的坐标,单击左、右截面按钮分别弹出左、右截面参数对话框,在截面参数对话框中可输入相应截面的控制参数。

图2 节段信息对话框Fig.2 Segment dialog box

编制响应单击截面参数对话框中确定按钮的函数,该函数首先求得截面顶点局部坐标,然后顺序调用旋转变换函数和平移变换函数,通过两次坐标变换将截面顶点局部坐标转换为整体坐标。截面局部坐标系和整体坐标系关系如下:

截面局部坐标系x轴方向由左节点指向右节点;

当左右节点z值不等时,截面局部坐标系y轴与整体坐标系x轴方向相同;否则平行于整体坐标系xoy平面,选取与整体坐标系x轴正向夹角较小的指向。

平移变换公式简单,不再赘述。旋转变换公式[9]为:

其中(x′,y′,z′)为变换前坐标,(x,y,z)为变换后坐标,li,mi,ni分别为整体坐标系xi轴与截面局部坐标系x轴、y轴、z轴夹角的余弦。

3.3 建立预应力筋几何模型

预应力筋投影为平面曲线,一般由直线段和圆弧构成,可利用导线法建立。由用户给定导线点二维坐标,对于圆弧还要给定半径以及开口方向。

3.4 网格划分

为不同类型截面设计网格划分对话框,利用该对话框用户可以输入子域沿横向和竖向的分段数目。图3为单箱单室箱梁网格划分参数对话框。留心的读者可能已经发现,子域沿纵向分段数目在节段信息对话框中输入。

图3 单箱单室箱梁网格划分参数对话框Fig.3 Meshing dialog box for single cell box girder

单独添加类,在类中添加子域划分函数、混凝土单元节点编号函数和预应力筋划分函数。子域划分函数以子域角点坐标和子域沿纵向、横向、竖向分段数目为参数,按照线性插值方法计算单元节点坐标,并将每一单元所有节点坐标作为一个元素添加到混凝土单元节点坐标数组中。混凝土单元节点编号函数按照图4编制。预应力筋划分算法如下:

1)为所有混凝土单元表面进行编号,对应顶点坐标都相同的两个表面认为是同一个面;

2)计算预应力筋与编号表面的交点;

3)将计算所得交点按某坐标排序,相邻交点间的线段作为一个预应力筋单元;

4)计算预应力筋单元所在混凝土单元编号。

为网格划分对话框添加类。在类中逐子域调用子域划分函数,然后调用混凝土单元节点编号函数,最后调用预应力筋划分函数即可实现整个模型的网格划分。

3.5 三维图形绘制技术

OpenGL与Windows操作系统中的GDI相比具有灵活、方便、高效的特点。应用Visual C++与OpenGL进行联合编程,需要构建OpenGL程序框架,实现Visual C++与OpenGL图形接口的链接。具体实现方法参见文献 [10]。

3.5.1 混凝土实体模型的绘制

OpenGL中,对于三维实体最简单的方式是用一组包围物体内部的平面多边形来表示[11]。PCPre将结构模型的外表面划分为若干个三角片元,绘制出所有的三角片元也就实现了结构模型的三维显示。三角片元采用GL_TRIANGLES图元绘制。

为使绘制的三维图形更具真实感需要使用光照,这就要求为每个三角片元指定法向量。利用向量叉乘的方法计算三角片元法向量,然后通过gl-Normal3dv()函数告知计算机。图5为采用PCPre建立的长10m,高5m的单箱单室箱梁几何模型。

3.5.2 预应力筋几何模型的绘制

在预应力筋曲线段选取足够多的插值点,将预应力筋空间曲线转化为空间折线。利用Open-GL中的GL_LINES图元绘制出所有的折线段即可。

图4 节点编号流程图Fig.4 Flow diagram for node numbering

3.5.3 有限元模型的绘制

在绘制完成的混凝土实体模型的基础上,采用区别于实体模型的颜色利用GL_LINES图元将混凝土单元的楞绘制出来,就实现了有限元模型的绘制。OpenGL中,采用glColor()函数设置接下来的绘图颜色。图6为采用PC-Pre建立的长10m,高5m的单箱单室箱梁有限元模型。

3.6 视图功能实现

图形变换是图形制作和显示中的重要内容,OpenGL提供了丰富的图形变换函数。利用Open-GL中的视点变换和模型变换可以完成视图功能的开发。

使用三维CAD软件时,为了观察的需要,经常需要进行典型观察视图的选择,PC-Pre定义了10个典型的观察视图。定义观察视图实际上就是定义观察者的位置和视线的方向,可以通过视点变换来实现。OpenGl提供的函数gluLookAt()[12]可以方便的完成此项功能。

通过模型变换可以实现图形平移、旋转和缩放功能。OpenGL中有3个用于模型变换的函数,glTranslate*()、glRotate*()和 glScale*(),他们分别通过平移、旋转和缩放来操作一个指定的对象。利用模型变换函数并结合鼠标事件,可以实现以下功能:当按下鼠标左键时图形跟随鼠标平移;当按下鼠标右键时图形跟随鼠标旋转;当转动滚轮时图形产生缩放。

4 结 论

本文利用Visual C++并结合OpenGL图形库完成了简易的有限元可视化前处理系统开发。该系统实现了三维实体结构的参数化建模,并且具备满足嵌入模型要求的网格划分功能,解决了预应力混凝土结构网格划分不便的难题。另外该系统具有良好的三维视图功能,用户可以方便直观地观察所建模型。

[1]王艺桥.预应力混凝土桥混凝土合理应力状态研究[D].上海:同济大学,2012.

[2]于 淼,焦淑红.基于VC++与OpenGL的船舶三维模型可视化应用 [J].信息技术,2011,(6):161-163.

[3]梁 柱.预应力混凝土箱梁三维实体单元分析前处理程序开发与应用 [D].杭州:浙江大学,2005.

[4]安晓卫,邵伟平.用于二维和三维问题的有限元前处理程序 [J].机械设计与制造,1995(1):21-23.

[5]杜宪亭,夏 禾,龙佩恒,等.一种RCM有限元带宽优化改进算法 [J].计算力学学报,2010,27(4):694-697.

[6]Rafael Mart,Vicente Camposa,Estefan a Pi″anaa.A branch and bound algorithm for the matrix bandwidth minimization [J].Europ-ean Journal of Operational Research,2008,186(2):513-528.

[7]江雄心,万平荣.三维有限元网格节点编号优化 [J].工程图学学报,2008,(4):22-26.

[8]吕希奎,周小平.实战OpenGL三维可视化系统开发与源码精解 [M].北京:电子工业出版社,2009.

[9]朱伯芳.有限元法的原理与应用 [M].北京:中国水利水电出版社,1998.

[10]吴 逊.VC++与OpenGL混合编程实现三维图形处理 [J].软件导航,2011,10(8):160-161.

[11]成思源,张群瞻.计算机图形学 [M].北京:冶金工业出版社,2003.

[12]王清辉,王 彪.Visual C++CAD应用程序开发技术 [M].北京:机械工业出版社,2003.

猜你喜欢
子域对话框预应力
采用UHPC实现无预应力的简支变连续设计分析
无黏结预应力框架结构的拆改加固设计
基于镜像选择序优化的MART算法
基于子域解析元素法的煤矿疏降水量预测研究
正常恢复虚拟机
预应力混凝土桥梁检测及其加固
Bootlace Worms’Secret etc.
What Is Beauty?
一种基于压缩感知的三维导体目标电磁散射问题的快速求解方法
CFRP-PCPs复合筋预应力损失分析及其计算