块体单元法分析的三个处理器是分析软件的核心部分,它们的功能是相对独立并一脉相承的。根据面向对象编程的思想和方法,笔者编制了三个相应的类以封装各个处理器的数据和操作行为。考虑到已有的Fortran计算程序(GenBlkd、GenStrsd、GenSeepd、Stress、Seep)之间存在较为复杂的关系,同时由于采用了“单文档-双视图”结构,使得如图2-7-3所示的三个处理过程之间的联系变得交叉和复杂,所以在编写这三个类的数据和操作函数时,对图2-7-3所示的三个处理过程作了必要的调整。
一、前处理类
前处理就其功能而言可分为两部分:物理建模和单元离散。物理建模是建立分析对象的物理模型,包括几何的和物理的参数。单元离散是将分析对象在物理模型的基础上离散成块体单元,形成块体单元法分析的计算模型。
块体单元法分析的对象是被结构面切割的岩体,计算所需的基本信息是这些结构面的产状和力学指标。在几何模型中,需要的信息包括:各个结构面(首先要简化或者离散成平面)的倾向、倾角、基准点坐标。在力学模型中,需要的参数包括:各个结构面的凝聚力、内摩擦角、抗拉强度、法向及切向刚度系数、流动参数、结构面的厚度以及荷载条件,如岩体的容重、集中荷载、面荷载、体荷载。与图2-7-3所示结构不同的是,几何模型在前处理中建立,但是力学模型将在本体分析中实现。
建立几何模型后,就可以进行单元的离散。在本篇第一章中,笔者已经基于矢体的概念研究建立了含有曲面的三维岩石块体单元系统的自动识别方法,并编制了相应的计算程序GenBlkd。调用该程序,即可生成块体单元系统。至此,前处理功能完成。
前处理类CPreProc的声明如下:
块体单元法分析的几何建模需要在三维空间环境中完成。笔者根据块体单元法分析的几何模型的特点,实现了基本结构面(包括平面CPlane和曲面CSurf)的视图模拟,使用户对各个结构面的走向和位置有一个清楚的感知。
在进行基本的几何建模时,结构面的视图模拟采用了Open GL技术。OpenGL是目前比较完善的三维图形标准,由SGI公司推出并成为业界主流标准。OpenGL函数库是一个与图形硬件无关的应用程序开发接口,包含近200个图形显示函数,能够实现模型绘制、场景变换、三维效果渲染、图像程序开发、实时动画以及人机交互等多种功能。
几何模型的基本元素是三维空间中的平面结构面(CPlane)和曲面地形面(CSurf),这两个类在数据和功能上具有某些相同之处。按照面向对象编程中继承的思想,可以建立具有它们的共性的基类,即面类(CFace),将这两个类作为面类的导出类。为了表示三维空间中的平面,需要预设一个三维环境,如一个空间六面体(CHexa),通过这个空间六面体与该平面相截的多边形来表示该平面,其视图显示是以线段(CLine)为基础的。在OpenGL技术中,地形面可以采用Bezier曲面来模拟。不论平面或者曲面,其基准点或控制点都可以用同一个类来抽象,即点类(CVertex)。点类也是其他几何元素(CLine、CHexa)的基本构成要素。作为最常使用的基本类,必须全面考虑其功能和使用的便捷性。为此,笔者设计了功能强大且使用方便的点类CVertex,可以适应任何与点有关的操作。
在前处理视图中,对于三维视图的缩放、旋转、移动等交互操作是通过一个控制球类(CBallCtrl)来实现的。通过捕捉鼠标或者键盘的消息,将平面行为映射到三维空间,实现三维视图操作。
二、本体分析类
按照图2-7-3中的结构,本体分析类只有简单的一个功能,即调用相应的程序(Stress或Seep)进行计算。而事实上,本体分析所需的数据是很复杂的,将这些数据的获取过程与本体分析分离是不适宜的。为此,笔者在抽象本体分析类的数据和函数时,将某些前处理中的功能转移到本体分析类的基类(CAnalysis)中,其声明如下:(www.xing528.com)
应力应变分析类(CStrs Anal)是基类(CAnalysis)的导出类,其功能是:首先建立力学模型,然后调用预处理程序(GenStrsd)准备应力应变分析所需的数据文件,最后指定计算条件,进行弹粘塑性块体单元法迭代计算(Stress)。该类的声明如下:
三、后置处理类
后置处理通常是为了将计算结果可视化,即根据计算数据生成相应的图像,利用颜色、密度、透明度、文字等技术,将不可见变为可见,在短时间内通过图形图像传递大量数据信息,使研究人员能够直观、迅速地观察到计算模拟的结果。
块体单元法分析的单元是任意形状的多面体。对于这种单元,目前尚无较好的一般性的图形显示方法。笔者将任意多面体表面离散为若干三角形面,以实现多面体的图形显示。按照AVS的UCD数据文件格式,形成非结构化网格数据文件,通过三维视图窗口显示块体单元系统及任意块体单元组合(前处理),为后处理中应力、位移、变形信息的可视化提供基础。WBlock引用了由AVS开发版导出的UCD文本文件读入模块类AUCDFileReader及三维视图窗口模块类AViewer3D,实现了脱离AVS系统独立运行的效果。其中,类AUCDFileReader的声明如下:
由以上类的声明可以看到使用AVS的模块进行VC++程序设计的特色。数据读入类AUCDFileReader只提供了数据文件名的接口(Filename)、导出对象(Out)以及供AViewer3D显示的目标接口(Obj)。编程时,将数据文件名赋给Filename,将Obj赋给AViewer3D的输入接口,就可以在AViewer3D的输出视口中获得文件数据的可视化图像,而且在输出视口中可以方便地执行缩放、旋转、平移等操作,无需编制具体的程序代码就可以实现高级数据可视化效果,这充分体现了面向对象编程的特点和优势。
鉴于前处理中的块体单元系统信息的可视化也需要在AViewer 3D中实现,所以将这部分功能封装在后置处理类的基类(CPostProc)中,而应力应变分析的后处理类(CStrsPost)和渗流分析的后处理类(CSeepPost)都由这个类导出。其中,类CStrsPost的功能是将块体单元法分析的大量的数据成果用图形或图像显示出来,包括块体单元系统轴测图、块体单元位移矢量图、块体单元变位图、结构面应力分布云图等。
CPost Proc的声明如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。