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.2 如何获得本软件

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

下载地址为:http://oslite.tech

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日 初步完成模态分析显示振形功能

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

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

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

2.2 新版OSLite

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

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

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. 前处理功能

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

4.1 材料定义功能

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

4.2 属性编辑功能

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

4.3 单元绘制功能

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

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

4.4 命令行操作

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

4.4.1.定义属性

简写命令 完整命令 描述
dof definedof 定义模型自由度
dum defineunimaterials 定义单轴材料
dnm definendmaterials 定义多轴材料
dsc1 definesection1 定义一维单元截面
dsc2 definesection2 定义面截面

4.4.2.绘制节点单元

简写命令 完整命令 描述
pt points 绘制点
ze zero 绘制零长度单元
tr truss 绘制桁架单元
bc beamcolumn 绘制梁柱单元
li link 绘制连接单元
be bearing 绘制支座单元
qu4 quad4 绘制4节点面单元
qu9 quad9 绘制9节点面单元
tri triangular 绘制3节点面单元
br8 brick8 绘制8节点体单元
br20 brick20 绘制20节点体单元
tet tetrahedron 绘制四面体单元
up4 u_p4 绘制4节点压力-应变单元
up8 u_p8 绘制8节点压力-应变单元
up9 u_p9 绘制9节点压力-应变单元
up20 u_p20 绘制20节点压力-应变单元
ca cable 绘制索单元

4.4.3.模型编辑

简写命令 完整命令 描述
ed edit 编辑单元
e erase 删除选择的节点单元
co copy 复制选择的节点单元
ro rotate 旋转复制选择的节点单元
mi mirror 镜像选择的节点单元
div divide 分割选择的“线”单元
res restraints 指定节点边界

4.4.4.切换视图

简写命令 完整命令 描述
xyz viewxyz 切换至XYZ视图
xy viewxy 切换至XY视图
xz viewxz 切换至XZ视图
yz viewyz 切换至YZ视图
zr zoomredraw 刷新
zw zoomwindow 窗口缩放
za zoomauto 自动缩放

4.4.5.其他

简写命令 完整命令 描述
op option 系统配置

命令功能会随着软件的持续开发继续增加,今后会进行分类完善。

5.后处理功能

近期正在移植OSLite老版本中后处理相关功能代码至新版本。

6.目前对OpenSees代码的支持

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

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

6.1 材料

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

单轴材料 关键字 导入 编辑
钢筋
Steel01 Material Steel01 OK OK
Steel02 Material Steel02 OK OK
Steel4 Material Steel4 OK OK
Hysteretic Material Hysteretic OK OK
Reinforcing Steel Material ReinforcingSteel OK OK
Dodd Restrepo Dodd_Restrepo OK OK
RambergOsgoodSteel Material RambergOsgood OK OK
SteelMPF SteelMPF OK OK
UVCuniaxial UVCuniaxial OK OK
混凝土
Concrete01 Material Concrete01 OK OK
Concrete02 Material Concrete02 OK OK
Concrete04 Material Concrete04 OK OK
Concrete06 Material Concrete06 OK OK
Concrete07 Concrete07 OK OK
Concrete01 Material With Stuff in the Cracks Concrete01WithSITC OK OK
ConfinedConcrete01 Material FRPConfinedConcrete
ConcreteD ConcreteD OK OK
FRPConfinedConcrete OK OK
ConcreteCM ConcreteCM OK OK
常规材料
Elastic Uniaxial Material Elastic OK OK
Elastic-Perfectly Plastic Material ElasticPP OK OK
Elastic-Perfectly Plastic Gap Material ElasticPPGap OK OK
Elastic-No Tension Material ENT OK OK
Parallel Material Parallel OK OK
Series Material Series OK OK
其他
CastFuse Material Cast
CastFuse
OK OK
ViscousDamper Material ViscousDamper OK OK
BilinearOilDamper Material BilinearOilDamper OK OK
Bilin Material
ModIMKPeakOriented Material
ModIMKPinching Material
SAWS Material SAWSMaterial
SAWS
OK OK
BARSLIP Material BarSlip OK OK
Bond_SP01 Bond_SP01
Bond
OK OK
Fatigue Material Fatigue OK OK
Hardening Material Hardening
Hardening2
OK OK
Impact Material ImpactMaterial
Impact
OK OK
Hyperbolic Gap Material HyperbolicGapMaterial OK OK
Limit State Material
MinMax Material MinMaxMaterial
MinMax
OK OK
ElasticBilin Material ElasticBilin
ElasticBilinear
OK OK
ElasticMultiLinear Material ElasticMultiLinear OK OK
MultiLinear Material MultiLinear OK OK
Initial Strain Material InitStrainMaterial
InitStrain
OK OK
Initial Stress Material InitStressMaterial
InitStress
OK OK
PathIndependent Material
Pinching4 Material Pinching4 OK OK
Engineered Cementitious Composites Material ECC01 OK OK
SelfCentering Material SelfCentering OK OK
Viscous Material Viscous OK OK
BoucWen Material BoucWen OK OK
BWBN Material BWBN OK OK
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 Material ElasticIsotropic OK OK
Elastic Orthotropic Material ElasticOrthotropic3D
ElasticOrthotropic
OK OK
J2 Plasticity Material J2Plasticity
J2
OK OK
Drucker Prager Material DruckerPrager OK OK
Concrete Damage Model
Plane Stress Material PlaneStressMaterial
PlaneStress
OK OK
Plane Strain Material PlaneStrainMaterial
PlaneStrain
OK OK
Multi Axial Cyclic Plasticity
Bounding Surface Cam Clay Material BoundingCamClay OK OK
Plate Fiber Material PlateFiberMaterial
PlateFiber
OK OK
Plane Stress Concrete Materials
FSAM – 2D RC Panel Constitutive Behavior FSAM OK OK
CycLiqCP Material CycLiqCP OK OK
CycLiqCPSP Material CycLiqCPSP OK OK
Manzari Dafalias Material ManzariDafalias OK OK
J2CyclicBoundingSurface Material J2CyclicBoundingSurface OK OK
PM4Sand Material PM4Sand OK OK
PM4Silt Material (Beta) PM4Silt OK OK
Stress Density Material stressDensity
StressDensity
OK OK
PlaneStressUserMaterial
PlateFromPlaneStress
PlateRebar
LayeredShell
ContactMaterial2D ContactMaterial2D OK OK
ContactMaterial3D ContactMaterial3D OK OK
InitialStateAnalysisWrapper InitialStateAnalysisWrapper OK OK
PressureIndependMultiYield Material
PressureDependMultiYield Material
PressureDependMultiYield02 Material
PressureDependMultiYield03 Material
FluidSolidPorousMaterial
AcousticMedium AcousticMedium OK OK
UVCmultiaxial UVCmultiaxial OK OK
UVCplanestress UVCplanestress OK OK

6.2 截面

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

截面类型 关键字 导入 编辑
Elastic Section Elastic OK
Fiber Section Fiber
fiberSec
NDFiber Section NDFiberWarping
NDFiber
Wide Flange Section WFSection2d
WSection2d
OK
RC Section RCSection2d OK
Parallel Section
Section Aggregator Aggregator
AddDeformation
OK
Uniaxial Section Generic1D
Generic1d
Uniaxial
Elastic Membrane Plate Section ElasticMembranePlateSection
Plate Fiber Section PlateFiber
Bidirectional Section Bidirectional
Isolator2spring Section Iso2spring

6.3 单元

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

单元类型 关键字 导入 编辑
零长度单元
zeroLength Element zeroLength OK OK
zeroLengthND Element zeroLengthND OK OK
zeroLengthSection Element zeroLengthSection OK OK
CoupledZeroLength Element CoupledZeroLength
ZeroLengthCoupled
OK OK
zeroLengthContact Element
zeroLengthContactNTS2D
zeroLengthInterface2D
zeroLengthImpact3D
桁架单元
Truss Element truss
Truss
trussSection
TrussSection
OK OK
Corotational Truss Element corotTruss
CorotTruss
corotTrussSection
corotTrussSection
OK OK
梁柱单元
Elastic Beam Column Element elasticBeamColumn
elasticBeam
OK OK
Elastic Beam Column Element with Stiffness Modifiers ModElasticBeam2d
modElasticBeam2d
OK OK
Elastic Timoshenko Beam Column Element ElasticTimoshenkoBeam
elasticTimoshenkoBeam
OK OK
Beam With Hinges Element forceBeamColumn
beamWithHinges
OK OK
Displacement-Based Beam-Column Element dispBeamColumn OK OK
Force-Based Beam-Column Element forceBeamColumn
timoshenkoBeamColumn
forceBeamColumnCBDI
forceBeamColumnCSBDI
forceBeamColumnWarping
forceBeamColumnThermal
elasticForceBeamColumnWarping
dispBeamColumnNL
dispBeamColumnThermal
elasticForceBeamColumn
nonlinearBeamColumn
dispBeamColumnWithSensitivity
OK OK
Flexure-Shear Interaction Displacement-Based Beam-Column Element dispBeamColumnInt OK OK
MVLEM – Multiple-Vertical-Line-Element-Model for RC Walls
SFI_MVLEM – Cyclic Shear-Flexure Interaction Model for RC Walls
节点单元
BeamColumnJoint Element beamColumnJoint OK
ElasticTubularJoint Element elasticTubularJoint
ElasticTubularJoint
OK
Joint2D Element Joint2D
Joint2d
OK
连接单元
Two Node Link Element twoNodeLink OK OK
支座单元
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 Element quad
stdQuad
quadWithSensitivity
OK OK
Shell Element shell
shellMITC4
Shell
ShellMITC4
OK OK
ShellDKGQ shellDKGQ
ShellDKGQ
OK OK
ShellNLDKGQ shellNLDKGQ
ShellNLDKGQ
OK OK
ShellNL shellNL
ShellNL
shellMITC9
ShellMITC9
OK OK
Bbar Plane Strain Quadrilateral Element bbarQuad
mixedQuad
OK OK
Enhanced Strain Quadrilateral Element enhancedQuad OK OK
SSPquad Element SSPquad
SSPQuad
OK OK
三节点面单元
Tri31 Element tri31
Tri31
OK OK
ShellDKGT shellDKGT
ShellDKGT
OK OK
ShellNLDKGT shellNLDKGT
ShellNLDKGT
OK OK
实体单元
Standard Brick Element stdBrick OK OK
Bbar Brick Element bbarBrick OK OK
bbarBrickWithSensitivity Element bbarBrickWithSensitivity OK OK
flBrick Element flBrick OK OK
Twenty Node Brick Element 20NodeBrick OK OK
Twenty Seven Node Brick Element
SSPbrick Element SSPbrick OK OK
四面体单元
FourNodeTetrahedron FourNodeTetrahedron OK OK
压力-应变单元
Four Node Quad u-p Element quadUP OK OK
Brick u-p Element brickUP OK OK
bbarQuad u-p Element bbarQuadUP OK OK
bbarBrick u-p Element bbarBrickUP OK OK
Nine Four Node Quad u-p Element 9_4_QuadUP OK OK
Twenty Eight Node Brick u-p Element 20_8_BrickUP OK OK
Twenty Node Brick u-p Element
Brick Large Displacement u-p Element
SSPquadUP Element SSPquadUP
SSPQuadUP
OK OK
SSPbrickUP Element SSPbrick
SSPBrickUP
OK OK
其他单元
ShallowFoundationGen
SurfaceLoad Element
VS3D4
AC3D8
ASI3D8
AV3D4
接触单元
SimpleContact2D Element
SimpleContact3D Element
BeamContact2D Element
BeamContact3D Element
BeamEndContact3D Element
zeroLengthImpact3D
索单元
CatenaryCable Element CatenaryCable OK OK

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)等。