时间:
近年来,随着中国经济的快速发展,为满足各种文化、体育及社会活动的需要,建造大跨空间结构的需求日益增多,各种形式的空间结构体系被成功应用于体育场馆、会展中心、机场航站楼及厂房等。目前,国内高校和研究所已研发了较多适用于工程应用的空间结构设计软件例如 SFCAD、MSTCAD、3D3S 和 STCAD 等,这些设计软件因其所属细分领域的不同而各具特色。但在参数化建模、非线性分析和动力分析等难点领域,国产结构设计软件仍落后于国外商业化软件。近几年国际政治形势紧张,世界主要大国开始在高端科技和基础科学领域限制技术授权,通用国产空间结构设计软件的自主研发和形式创新就显得尤为重要和迫切。
为了打造一个国产空间结构设计软件共同开发的环境和平台,本文研究并提出了一个具有完全自主知识产权的空间结构设计软件框架,拟充分开放源代码,允许开发者对程序自由扩展。基于本开源框架,不同背景的研究人员可以专注于开发更轻便、智能的参数化建模模块,或者研究有限元分析中动力分析、弹塑性分析和稳定分析等难点问题,避免消耗大量时间了解并开发空间结构优化设计的全过程,充分发挥各自优势,共同发展空间结构分析与设计软件的难点领域,为进一步开发国产大型通用结构设计软件提供创新思路以及方法基础。
本文基于面向对象的程序开发方法,使用 “类” 定义空间结构设计过程的事务对象,介绍软件框架对空间结构设计和验算功能的程序运行实现,针对本开源软件的可扩展性问题,文章以构件验算为例详细说明了软件框架的 “低耦合” 特点。
1 开发需求及原理
1.1 空间结构设计内容
空间结构设计一般包括参数化建模、有限元分析、结构优化设计和施工图设计等过程。本文以空间结构优化设计中构件截面优化设计和节点设计两个主要过程为例进行阐述。构件截面优化设计是依据优化算法为构件选择可应用的最优截面,一般以降低构件的材料总重量或者总造价为优化目标。构件截面的改变将导致结构的总刚度矩阵变化,结构在更新构件截面后需重新计算内力结果,随后进一步执行构件截面优化设计,重复优化过程直至所有构件截面都满足优化目标。节点设计是依据设计规范要求对节点及其配件进行尺寸设计和强度验算,一般在构件截面优化设计完成后执行。
1.2 开发需求
本文提出的软件框架首先需要实现空间结构设计的主要功能,确保计算结果准确。其次,本软件框架还需要具备可扩展性强的特点,可扩展性是开源软件迭代开发和不断发展的关键,在软件框架的设计过程中应予以重点考虑。
软件的结构设计功能。该软件作为空间结构设计软件,应该实现接收用户输入的指令、构造并初始化结构模型、完成结构设计与规范验算和返回程序运行结果等基本功能。用户输入的指令包括新建结构模型、配置程序可选用的截面库和材料库、构造构件和节点、设置选用的设计规范和设计参数、请求结构设计结果等。程序输出的信息包括程序的运行进度、构件和节点设计结果、结构总用量等。
软件的程序框架可扩展性。该软件的程序框架应该具有良好的可扩展性,达到 “高内聚,低耦合” 的系统要求。开发软件之前考虑到以下情况,不同国家地区的设计规范对同类型结构在整体、构件和节点的验算方法和标准各不相同,而且随着时间的变化,构件和节点的类型在不断扩充,设计规范的条文规定也在不断发展,以及在开源之后,软件系统需要面对不同领域开发者的学习、改进和扩展。只有程序框架的层间做到低耦合,开发者在添加或者修改模块化的代码时就不用修改已有的程序逻辑,避免产生额外的代码修改工作量。
1.3 面向对象的程序开发方法
本文介绍的空间结构设计软件基于面向对象的方法进行程序开发,将空间结构设计过程中的事务抽象成为对象,而对象的属性信息和函数方法将被封装于类的定义中。其中,对象又按基类、派生类的概念构成继承的层次关系,基类定义了派生类共同拥有的函数和成员,派生类则从基类继承公有的信息,同时定义各自特有的函数和成员。软件在不同的类之间通过调用接口函数实现执行代码和获取数据信息。接口函数是一种由基类声明,并在派生类中定义的函数形式,程序在运行时自动调用派生类中接口函数的代码,避免了在代码实现时的类型判断,降低了程序框架的逻辑复杂度。基于上述开发思路,本文所提出的空间结构设计软件将具有程序框架逻辑简单、扩展性良好的优势。
2 程序的系统框架和类
2.1 系统框架
空间结构设计软件系统的总体框架可分为 3 层:接口层、结构组成层和核心框架层,3 层之间要达到 “低耦合” 的要求。
接口层:该层将后端程序进行了封装,为其他模块提供可交互的 API(Application Programming Interface,应用程序接口),即允许普通用户、图形界面和其他计算模块对后端程序的访问和命令调度。
结构组成层:该层主要概括了空间结构的组成成分,包括结构的截面库、材料库、构件和节点等。本软件系统应该支持多样化结构类型的设计和扩展。
核心框架层:该层是整个程序运行的核心服务,包括优化构件截面、设计节点、验算构件和节点等服务,这些服务各自独立又紧密相关,共同合作实现软件的结构设计功能。
2.2 类及相互关系
2.2.1 接口层
为实现接口层,本软件设计了总控制类将后端程序进行了封装,提供构造结构组成层和设置核心框架层的 API。前端(交互对象)开发者只需利用总控制类开放的 API 即可实现空间结构设计的全过程,而不用消耗时间去理解后端程序的实现逻辑。
2.2.2 结构组成层
本软件将空间结构的组成抽象为各种基类,包括模型类、单元类、节点类、材料类和截面类等,每种基类都描述了整体结构的一部分特征。
模型类:在程序的结构组成层,该类描述了结构的所有属性,用于存储结构单元、节点、截面和材料对象,并提供了添加和查找单元、节点、截面和材料对象的接口函数,记录结构设计状态信息。
节点类:节点类描述了空间结构中节点的空间位置信息和节点设计功能。节点基类提供返回节点的全局坐标、修改节点的全局坐标和返回连接单元等公有接口函数,节点派生类则实现计算节点重量和价格、返回节点类型和设计节点等函数。在空间结构中,部分节点类型还应该对该类的节点配件进行设计,通过节点配件结构体存储设计参数和设计结果。
截面类和材料类:截面类存储了截面对象的设计用指标,可以根据截面形状返回设计用的指标参数;材料类定义了设计规范中的设计用材料强度指标,与设计规范关系紧密。
单元类:该类实现了空间结构中与单元设计有关的服务,包括设置端部节点、截面和材料的对象,返回单元内力,验算构件等函数方法。考虑到大量构件的截面或者材料属性相同,程序在单元类中定义截面类和材料类的数据成员,并引用截面库和材料库中的实例。
2.2.3 核心框架层
本软件的核心服务是设计并验算空间结构的构件和节点。在核心框架层,程序通过设计类、规范类和优化方法类共同完成程序的运行和调度。
设计类:该类负责模型对象的优化设计全过程。不同种类或不同结构尺寸的空间结构工程可能采用不同的设计方法,在程序中,将根据模型对象的种类和尺寸,为其指定相应设计派生类(即设计方法)。
设计规范类:该类规定了所有与整体结构、构件以及节点相关的验算和设计标准,保证整个结构设计的安全。
优化方法类:该类主要实现构件截面的优化设计,一般以降低结构的总造价或者材料总重量为优化目标,提高结构设计的经济性。
3 软件实现
3.1 结构设计功能实现
前端程序将结构的物理参数信息转换成计算机指令,通过接口层的总控制类输入。总控制类构造一个模型类的对象表示整个空间结构体,构造可选用的截面类对象并添加到截面库中,构造用户选用的材料类对象并添加到材料库中,构造节点和构件对象并且所有构件都默认选用面积最小的截面。至此,完成模型类对象的构造和初始化。
完成程序的初始化之后,程序中的总控制类调用设计类的设计函数开始对模型对象进行设计。程序先进行构件截面的优化设计,需要读取模型类对象的单元仓库,遍历所有构件对象,调用优化方法类的优化函数对每个构件的截面进行设计。优化方法类应该根据设计规范类对构件截面的校核结果,从截面库中为构件选择最优的截面,其中,单元派生类实现了不同设计规范对该类构件的验算步骤。最后在设计函数中汇总所有构件的设计结果,若有构件截面发生修改,程序将更新模型对象,并且对其执行有限元分析之后,再重新进行结构设计,直至所有构件均满足优化目标。
结束构件设计之后,若所有构件截面均满足设计规范类的验算要求,本程序才开始设计节点。在设计类的设计函数中,程序读取模型类对象的节点仓库,遍历所有节点对象,调用设计规范类的节点设计函数对每个节点进行设计。实际上,节点派生类实现该类节点的设计和验算全过程,并确保了节点和节点配件的尺寸均满足强度和构造要求。最后,在设计函数中汇总所有节点的设计结果,并返回给用户整个结构的构件和节点设计结果,以及结构整体的用钢量。
3.2 程序可扩展性实现
以 GB50017-2017《钢结构设计标准》(简称《钢标》)中构件验算为例,介绍软件框架的可扩展性问题。当出现构件的端部连接形式、截面形状和材料强度等属性不同的情况时,设计规范对构件的验算步骤和公式也将有所区别。
由相关公式可知,设计规范类验算构件的安全性时,存在大量判断构件类型、读取构件截面和材料等设计参数的情况,即设计规范类和单元类是高耦合的关系。本文在介绍软件的总体框架时,强调了不同层之间需做到低耦合,避免开发者在增加或者修改模块化内容时,额外产生较多程序框架或代码修改的工作。为了解决程序框架的高耦合问题,本程序基于面向对象的开发方法,将构件类型的设计规范验算步骤都以回调函数的形式在单元派生类中实现,回调函数是指针型函数的一种使用形式,设计规范派生类只需在构件验算函数中进行验算流程的控制。
本程序中使用 “计算步骤_设计规范名称” 形式的字符串表示设计规范对单元验算的计算步骤,每个字符串又将在单元派生类中唯一映射一个回调函数,这种映射关系以哈希字典的数据成员形式存储在单元派生类中。程序运行时,设计规范派生类向单元派生类传递字符串,系统通过哈希字典就会自动执行字符串映射的回调函数,实现验算单元的步骤。
本程序中的材料类实现了设计规范定义的设计所需的材料指标参数和计算方法,每种设计规范类中也都记录了该类使用的材料派生类名称。材料类以材料参数结构体封装所有的材料设计参数和强度指标,提供接口函数来接受设计参数、计算材料强度指标并输出材料参数结构体。
开发者在程序框架中添加设计规范派生类时,在该类的单元验算函数中以字符串控制验算流程,在该规范可以校核的单元派生类中定义字符串对应的回调函数并建立映射关系。程序应该为该设计规范派生类实现相匹配的材料类。添加新的单元派生类时,在该类中除实现单元基类中的接口函数,还需定义各种规范验算对应的回调函数并建立映射关系。由此可见,开发者在本文提出的程序框架中扩展模块化内容时,不需改变现有的程序逻辑和代码,体现了本文提出的空间结构设计软件具有可扩展性强的优势。
4 结语
本文提出一个空间结构设计的开源软件框架,基于面向对象的程序开发方法,用类定义了空间结构的设计事务,说明了程序功能实现的类及函数调用过程,并以《钢标》中构件验算为例说明了软件框架具有良好扩展性。
本文研究的开源软件能够提供一个开放的共享研究平台,允许更多开发者基于本软件框架进行理论研究并提交自己的应用成果。希望聚集国内空间结构设计领域的研发力量,充分发挥各自优势,累积技术实力,为进一步开发国产大型通用结构设计软件提供创新思路以及方法基础。
叶景涛,龚景海,上海交通大学土木工程系,上海市公共建筑与基础设施数字化运维重点实验室,202301