1. 简介

1.1 OSLite是什么

OpenSees(Open System for Earthquake Engineering Simulation)是由美国国家自然科学基金(NSF)资助、西部大学联盟“太平洋地震工程研究中心”(Pacific Earthquake Engineering Research Center,简称PEER)主导、加州大学伯克利分校为主研发而成的、用于结构和岩土方面地震反应模拟的一个较为全面且不断发展的开放源代码分析平台,它具有便于改进,易于协同开发的优点,研究人员可以通过二次开发来添加新单元、材料本构以及求解器。

与商业软件相比,OpenSees并没有提供图形用户界面和可视化模块。使用过程中,用户一般是借助文本编辑器编辑输入文件,然后再交由OpenSees进行计算得到计算结果。由于缺乏可视化模块和前后处理,使得用户不得不花费很大精力创建输入文件,当结构模型较为复杂时,没有直观的模型显示,输入文件容易出错且难以排查。

OSLite 是免费、轻量级的OpenSees前后处理程序。OSLite的图形用户界面采用开放源代码的QT界面库开发;模型可视化采用了开放源代码的VTK可视化工具库

OSLite开发的目标是完成一款以OpenSees为计算内核的全功能结构通用有限元软件,并为其他内核求解器预留接口。
1.1.png

1.2 如何获得本软件

非常感谢关注OSLite这个软件,它是出于公益目的开发的软件,您可以免费获得它。
您可以通过发送email到邮箱jacques.chen@qq.com索取所需的版本,或者直接通过Internet在线下载,

下载地址为:http://oslite.tech/index.php/Download.html

2. OSLite的开发过程

OSLite的开发过程包含两个阶段,2016年10月~2017年6月本人在非洲工作期间,因个人兴趣爱好,在学习OpenSees过程中没有好的可视化软件使用,基于wxWidgets界面库+VTK可视化库开发的第一版OSLite。后来因为一些个人原因中断了开发,并且前期架构设计较差难以继续拓展,于2020年6月开始推掉全部代码重新设计架构,基于QT界面库+VTK可视化库开发的新版本OSLite。

2.1 第一阶段

  • 2016年10月01日 启动项目
  • 2016年10月09日 初步完成 Dxf文件接口设计
  • 2016年10月30日 通过OpenGL实现杆系模型可视化
  • 2016年12月15日 通过Trie-Tree算法实现关键字补全
  • 2016年12月21日 增加多线程调用OpenSees功能
  • 2017年01月04日 基于VTK重写可视化模块
  • 2017年01月24日 增加多种平面单元可视化
  • 2017年02月03日 通过内嵌TCL解释器重写代码解析模块
  • 2017年02月16日 通过增加多种实体单元可视化
  • 2017年05月27日 增加实时位移显示
  • 2017年06月11日 重写程序主界面,初步加入位移云图功能
  • 2017年06月19日 加入位移动画回放功能
  • 2017年06月30日 初步完成模态分析显示振形功能

1.4.1.png

第一版的最初定位仅仅是作为模型可视化工具在开发,整体架构均围绕代码解析展开,这也是导致后期难以拓展继续开发的原因。后处理功能也仅仅完成位移可视化。

因该版OSLite,本人结实了不少高校老师、学生,开发过程中也获得了许多帮助,现已将该版本完全开源。

代码及可执行文件下载地址:http://oslite.tech/index.php/Download.html

2.2 新版OSLite

2020年6月启动新版本开发工作,开发该版本之前,本人花了两个月时间学习软件架构设计、阅读了一些优秀开源软件的代码。

目前该版本的开发在持续进行中,截止2022年4月1号,OSLite包含207个代码文件,41286行代码。完成46种常见单轴材料、22种多轴材料、44种单元的OpenSees代码解析和可视化操作。

1.4.2.png

3. OSLite目标理念

目前市场上主流的商业结构有限元软件各有各的优点,但也或多或少都存在一些问题。软件工程师始终不是结构工程师,工作性质的不同带来了思维方式的不同,只有结构工程师知道结构工程师需要的是什么。新版本开发的目标是完成一款以OpenSees为计算内核的全功能结构通用有限元软件,并为其他内核求解器预留接口。OSLite的目标并不是取代其他软件,也不为与其他同类软件竞争,仅仅是为了解决一些痛点,提供多一种选择。

OSLite开发过程中借鉴了许多其他我认为非常优秀的软件设计(不仅仅是有限元软件),例如Midas Civil的结构树、AutoCAD的命令行和属性面板、SAP2000的简洁界面等等。

OSLite的操作逻辑遵循软件开发的KISS原则和奥卡姆剃刀定律。

KISS 是英文 Keep it Simple and Stupid 首字母的缩写,意思是“保持简单和愚蠢”,设计越简单越好,任何没有必要的复杂都是需要避免的。任何功能的设计均努力缩短需要的操作步骤,类似苹果iOS系统的设计,屏幕操作尽可能的在三次以内达到想要的功能。

奥卡姆剃刀定律(Occam's Razor, Ockham's Razor)的原则是“如无必要,勿增实体” (Entities should not be multiplied unnecessarily)。对于该定律最明显的反例就是Midas Civil,该软件相同的功能均可以在多个位置找到,例如定义属性功能,可以同时使用右键菜单、结构树、以及Ribbon选项卡。OSLite尽可能的回避这样的设计。

4. 前处理功能

MainGUI.png

软件图形界面包含菜单栏、常用工具栏、单元绘制工具栏、结构树、模型可视化区、命令行、属性面板等几个区域。

软件主要菜单如下:
menu.png

4.1 材料定义功能

在“定义”菜单下选择材料,然后在“选择材料类型”对话框通过下拉列表选择材料种类进行编辑添加。也可在结构树中通过右键菜单添加材料。
matDef.png

4.2 属性编辑功能

在结构树中选择要编辑的属性,右键菜单中选择编辑功能。
EditProps.png

4.3 单元绘制功能

Draw.png

从“绘制”菜单或者左侧“单元绘制工具栏”选择要绘制的单元类型,在右侧的属性面板中设置好材料类型等单元属性,根据命令行提示进行绘制。

目前软件的图形化操作功能,在界面、操作习惯等方面尽可能的结合Sap2000、Midas Civil以及AutoCAD等工程师常用软件。截止2022年4月1号,已经对OpenSees所支持的材料、单元全部实现图形化接口设计。部分图形化对话框如下:

4.3.png

4.4 命令行操作

OSLite的命令行是一个借鉴AutoCAD命令行的设计。命令行功能是用户与软件之间进行交互的一种非常高效的方式。交互的含义是“输出”和“输入”,该功能区是信息输出窗口和命令输入窗口公用的设计。目前软件支持的命令如下:

简写命令完整命令描述
xyzviewxyz切换至XYZ视图
xyviewxy切换至XY视图
xzviewxz切换至XZ视图
yzviewyz切换至YZ视图
zrzoomredraw刷新
zwzoomwindow窗口缩放
zazoomauto自动缩放
dsdefinesystem定义模型自由度
dmdefinematerials定义材料
dscdefinesections定义截面
ptpoints绘制点
zezero绘制零长度单元
trtruss绘制桁架单元
bcbeamcolumn绘制梁柱单元
lilink绘制连接单元
bebearing绘制支座单元
qu4quad4绘制4节点面单元
qu9quad9绘制9节点面单元
tritriangular绘制3节点面单元
br8brick8绘制8节点体单元
br20brick20绘制20节点体单元
tettetrahedron绘制四面体单元
up4u_p4绘制4节点压力-应变单元
up8u_p8绘制8节点压力-应变单元
up9u_p9绘制9节点压力-应变单元
up20u_p20绘制20节点压力-应变单元
cacable绘制索单元
opoption调用程序配置窗口

命令功能会随着软件的持续开发继续增加,今后会进行分类完善。目前正在开发中的命令主要有单元编辑相关命令,类似AutoCAD的co(copy)、m(move)、mi(mirror)命令。

5.后处理功能

近期正在移植OSLite老版本中后处理相关功能代码至新版本,以下介绍以老版本OSLite为例。

5.1 实时位移显示

使用recorder命令对结构中重要节点、单元的位移进行记录,同时记录结构的基底反力,就可以绘制结构的滞回曲线。但是在OpenSees使用recorder向文件中添加数据的时候,文件是处于锁定状态的,也就是不能在模型计算的过程中实时的获取记录的位移,因此recorder提供了另一个方法——TCP发送。

post1.png

5.2 模态位移显示

通过图形界面自动添加模态分析相关代码,并对模态分析结果进行可视化。

post2.png

5.3 位移动画

通过读取recorder命令所记录的位移数据,通过可视化模块进行直观的表达。

post3.png

6.目前对OpenSees代码的支持

OSLite自带了TCL求解器,所以导入的代码可以是任意合法的TCL代码。OpenSees脚本本身是TCL脚本的拓展应用,对于材料、截面、单元等都是以拓展关键字的方式实现。

由于OpenSees是开源软件,且作为开放平台对全世界开放,各个团队均对OpenSees贡献了单元、材料本构代码。目前的OpenSees材料库、单元库非常庞大,故在OSLite开发之初并不采用逐一解析的方式来支持OpenSees代码,转而采用递归算法+栈数据结构实现平衡括号算法来解析OpenSees语法,将一种材料/单元的语法解析简化为一行括号表达式的编辑工作。

6.1 材料

目前OSLite所支持的OpenSees材料关键字列表如下:

单轴材料关键字导入编辑
钢筋
Steel01 MaterialSteel01OKOK
Steel02 MaterialSteel02OKOK
Steel4 MaterialSteel4OKOK
Hysteretic MaterialHystereticOKOK
Reinforcing Steel MaterialReinforcingSteelOKOK
Dodd RestrepoDodd_RestrepoOKOK
RambergOsgoodSteel MaterialRambergOsgoodOKOK
SteelMPFSteelMPFOKOK
UVCuniaxialUVCuniaxialOKOK
混凝土
Concrete01 MaterialConcrete01OKOK
Concrete02 MaterialConcrete02OKOK
Concrete04 MaterialConcrete04OKOK
Concrete06 MaterialConcrete06OKOK
Concrete07Concrete07OKOK
Concrete01 Material With Stuff in the CracksConcrete01WithSITCOKOK
ConfinedConcrete01 MaterialFRPConfinedConcrete
ConcreteDConcreteDOKOK
FRPConfinedConcrete OKOK
ConcreteCMConcreteCMOKOK
常规材料
Elastic Uniaxial MaterialElasticOKOK
Elastic-Perfectly Plastic MaterialElasticPPOKOK
Elastic-Perfectly Plastic Gap MaterialElasticPPGapOKOK
Elastic-No Tension MaterialENTOKOK
Parallel MaterialParallelOKOK
Series MaterialSeriesOKOK
其他
CastFuse MaterialCast / CastFuseOKOK
ViscousDamper MaterialViscousDamperOKOK
BilinearOilDamper MaterialBilinearOilDamperOKOK
Bilin Material
ModIMKPeakOriented Material
ModIMKPinching Material
SAWS MaterialSAWSMaterial / SAWSOKOK
BARSLIP MaterialBarSlipOKOK
Bond_SP01Bond_SP01 / BondOKOK
Fatigue MaterialFatigueOKOK
Hardening MaterialHardening / Hardening2OKOK
Impact MaterialImpactMaterial / ImpactOKOK
Hyperbolic Gap MaterialHyperbolicGapMaterialOKOK
Limit State Material
MinMax MaterialMinMaxMaterial / MinMaxOKOK
ElasticBilin MaterialElasticBilin / ElasticBilinearOKOK
ElasticMultiLinear MaterialElasticMultiLinearOKOK
MultiLinear MaterialMultiLinearOKOK
Initial Strain MaterialInitStrainMaterial / InitStrainOKOK
Initial Stress MaterialInitStressMaterial / InitStressOKOK
PathIndependent Material
Pinching4 MaterialPinching4OKOK
Engineered Cementitious Composites MaterialECC01OKOK
SelfCentering MaterialSelfCenteringOKOK
Viscous MaterialViscousOKOK
BoucWen MaterialBoucWenOKOK
BWBN MaterialBWBNOKOK
PySimple1 Material
TzSimple1 Material
QzSimple1 Material
PyLiq1 Material
TzLiq1 Material
PySimple1Gen Command
TzSimple1Gen Command
KikuchiAikenHDR Material
KikuchiAikenLRB Material
AxialSp Material
AxialSpHD Material
Pinching Limit State Material
CFSWSWP
CFSSSWP
多轴材料关键字导入编辑
Elastic Isotropic MaterialElasticIsotropicOKOK
Elastic Orthotropic MaterialElasticOrthotropic3D / ElasticOrthotropicOKOK
J2 Plasticity MaterialJ2Plasticity / J2OKOK
Drucker Prager MaterialDruckerPragerOKOK
Concrete Damage Model
Plane Stress MaterialPlaneStressMaterial / PlaneStressOKOK
Plane Strain MaterialPlaneStrainMaterial / PlaneStrainOKOK
Multi Axial Cyclic Plasticity
Bounding Surface Cam Clay MaterialBoundingCamClayOKOK
Plate Fiber MaterialPlateFiberMaterial / PlateFiberOKOK
Plane Stress Concrete Materials
FSAM - 2D RC Panel Constitutive BehaviorFSAMOKOK
CycLiqCP MaterialCycLiqCPOKOK
CycLiqCPSP MaterialCycLiqCPSPOKOK
Manzari Dafalias MaterialManzariDafaliasOKOK
J2CyclicBoundingSurface MaterialJ2CyclicBoundingSurfaceOKOK
PM4Sand MaterialPM4SandOKOK
PM4Silt Material (Beta)PM4SiltOKOK
Stress Density MaterialstressDensity / StressDensityOKOK
PlaneStressUserMaterial
PlateFromPlaneStress
PlateRebar
LayeredShell
ContactMaterial2DContactMaterial2DOKOK
ContactMaterial3DContactMaterial3DOKOK
InitialStateAnalysisWrapperInitialStateAnalysisWrapperOKOK
PressureIndependMultiYield Material
PressureDependMultiYield Material
PressureDependMultiYield02 Material
PressureDependMultiYield03 Material
FluidSolidPorousMaterial
AcousticMediumAcousticMediumOKOK
UVCmultiaxialUVCmultiaxialOKOK
UVCplanestressUVCplanestressOKOK

6.2 截面

目前OSLite所支持的OpenSees截面关键字列表如下:

截面类型关键字导入编辑
Elastic SectionElasticOK
Fiber SectionFiber / fiberSec
NDFiber SectionNDFiberWarping / NDFiber
Wide Flange SectionWFSection2d / WSection2dOK
RC SectionRCSection2dOK
Parallel Section
Section AggregatorAggregator / AddDeformationOK
Uniaxial SectionGeneric1D / Generic1d / Uniaxial
Elastic Membrane Plate SectionElasticMembranePlateSection
Plate Fiber SectionPlateFiber
Bidirectional SectionBidirectional
Isolator2spring SectionIso2spring

6.3 单元

目前OSLite所支持的OpenSees单元关键字列表如下:

单元类型关键字导入编辑
零长度单元
zeroLength ElementzeroLengthOKOK
zeroLengthND ElementzeroLengthNDOKOK
zeroLengthSection ElementzeroLengthSectionOKOK
CoupledZeroLength ElementCoupledZeroLength / ZeroLengthCoupledOKOK
zeroLengthContact Element
zeroLengthContactNTS2D
zeroLengthInterface2D
zeroLengthImpact3D
桁架单元
Truss Elementtruss / Truss /
trussSection / TrussSection
OKOK
Corotational Truss ElementcorotTruss / CorotTruss /
corotTrussSection / corotTrussSection
OKOK
梁柱单元
Elastic Beam Column ElementelasticBeamColumn / elasticBeamOKOK
Elastic Beam Column Element with Stiffness ModifiersModElasticBeam2d / modElasticBeam2dOKOK
Elastic Timoshenko Beam Column ElementElasticTimoshenkoBeam /
elasticTimoshenkoBeam
OKOK
Beam With Hinges ElementforceBeamColumn /
beamWithHinges
OKOK
Displacement-Based Beam-Column ElementdispBeamColumnOKOK
Force-Based Beam-Column ElementforceBeamColumn /
timoshenkoBeamColumn
forceBeamColumnCBDI
forceBeamColumnCSBDI
forceBeamColumnWarping
forceBeamColumnThermal
elasticForceBeamColumnWarping
dispBeamColumnNL
dispBeamColumnThermal
elasticForceBeamColumn
nonlinearBeamColumn
dispBeamColumnWithSensitivity
OKOK
Flexure-Shear Interaction Displacement-Based Beam-Column ElementdispBeamColumnIntOKOK
MVLEM - Multiple-Vertical-Line-Element-Model for RC Walls
SFI_MVLEM - Cyclic Shear-Flexure Interaction Model for RC Walls
节点单元
BeamColumnJoint ElementbeamColumnJointOK
ElasticTubularJoint ElementelasticTubularJoint / ElasticTubularJointOK
Joint2D ElementJoint2D / Joint2dOK
连接单元
Two Node Link ElementtwoNodeLinkOKOK
支座单元
Elastomeric Bearing (Plasticity) Element
Elastomeric Bearing (Bouc-Wen) Element
Flat Slider Bearing Element
Single Friction Pendulum Bearing Element
TFP Bearing
Triple Friction Pendulum Element
MultipleShearSpring Element
KikuchiBearing Element
YamamotoBiaxialHDR Element
ElastomericX
LeadRubberX
HDR
RJ-Watson EQS Bearing Element
FPBearingPTV
四节点面单元
Quad Elementquad / stdQuad / quadWithSensitivityOKOK
Shell Elementshell / shellMITC4 / Shell / ShellMITC4OKOK
ShellDKGQshellDKGQ / ShellDKGQOKOK
ShellNLDKGQshellNLDKGQ / ShellNLDKGQOKOK
ShellNLshellNL / ShellNL / shellMITC9 / ShellMITC9OKOK
Bbar Plane Strain Quadrilateral ElementbbarQuad / mixedQuadOKOK
Enhanced Strain Quadrilateral ElementenhancedQuadOKOK
SSPquad ElementSSPquad / SSPQuadOKOK
三节点面单元
Tri31 Elementtri31 / Tri31OKOK
ShellDKGTshellDKGT / ShellDKGTOKOK
ShellNLDKGTshellNLDKGT / ShellNLDKGTOKOK
实体单元
Standard Brick ElementstdBrickOKOK
Bbar Brick ElementbbarBrickOKOK
bbarBrickWithSensitivity ElementbbarBrickWithSensitivityOKOK
flBrick ElementflBrickOKOK
Twenty Node Brick Element20NodeBrickOKOK
Twenty Seven Node Brick Element
SSPbrick ElementSSPbrickOKOK
四面体单元
FourNodeTetrahedronFourNodeTetrahedronOKOK
压力-应变单元
Four Node Quad u-p ElementquadUPOKOK
Brick u-p ElementbrickUPOKOK
bbarQuad u-p ElementbbarQuadUPOKOK
bbarBrick u-p ElementbbarBrickUPOKOK
Nine Four Node Quad u-p Element9_4_QuadUPOKOK
Twenty Eight Node Brick u-p Element20_8_BrickUPOKOK
Twenty Node Brick u-p Element
Brick Large Displacement u-p Element
SSPquadUP ElementSSPquadUP / SSPQuadUPOKOK
SSPbrickUP ElementSSPbrick / SSPBrickUPOKOK
其他单元
ShallowFoundationGen
SurfaceLoad Element
VS3D4
AC3D8
ASI3D8
AV3D4
接触单元
SimpleContact2D Element
SimpleContact3D Element
BeamContact2D Element
BeamContact3D Element
BeamEndContact3D Element
zeroLengthImpact3D
索单元
CatenaryCable ElementCatenaryCableOKOK

7. OSlite所用到的开源库及开源协议介绍

7.1 QT界面库

Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

QT库目前包含三种授权方式,商业授权、开源 GPL 协议、开源LGPL 协议。

对这两种开源协议,简单来说,使用 GPL 版本的软件一定还是 GPL 的开源软件,无论是使用了 Qt 的程序代码还是修改了 Qt 库代码,都必须按照 GPL 来发布,这是 GPL 的传染性。

GPL 是什么都要开源,这对商业软件应用是不利的,所以QT增加了 LGPL 授权 (第一个 L 可以叫 Lesser 宽松版或 Library 开发库版)。使用 LGPL 授权就可以利用 Qt 官方动态链接库,而不必开放商业代码。只要不修改和定制 Qt 库,仅使用 Qt 官方发布的动态链接库就可以不开源,这是商业友好的授权模式。

7.2 VTK可视化库

可视化工具库VTK(Visualization Toolkit)是一个开放源代码,跨平台、支持平行处理的图形应用库。

VTK 利用了面向对象的技术,它包括C++类库,及Tcl/TK、Java、Python 等一些解释型界面层。其图形模型建立在比OpenGL 更高层基础之上,所有的函数都封装在700 多个类库中。VTK 不仅支持对几何体的显示及渲染,还同时支持许多图形及可视化算法(矢量、标量、张量)及高级的建模技术(快速建模、多边形优化、Delaunay 三角形片生成法)。同时,VTK将图形图像算法直接集成,将2D/3D 图形图像的算法和数据融合起来。

VTK可视化库采用开源BSD协议。BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由 的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开 发自己的产品时,需要满足三个条件:

如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布 代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而 很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在 必要的时候可以修改或者二次开发。

7.3 wxWidgets界面库

wxWidgets是一个开放源代码且跨平台的对象工具集,可用来创建基本的图形用户界面(GUI)。wxWidgets由Julian Smart于1992年首先开发。

使用wxWidgets库所开发的软件只需要对源代码做少量更改(或者完全不用更改),就能在各种不同的作业平台上编译并运行。目前可支持Windows、Apple Macintosh、Linux/Unix、OpenVMS、以及OS/2。wxWidgets本身使用C++语言开发,但也有其它不同编程语言的绑扎,例如:Python(wxPython)、Lua(wxlua)、Perl(wxPerl)、Ruby(wxRuby)、Smalltalk(wxSmalltalk)、Java(wx4j)、甚至是JavaScript(wxjs)等。