oss

OpenSees 如何在切换计算方法时保留结构模型

11 条来源 11 条一手来源 已翻译 2026年11月1号

正在加载阅读与收藏统计…
正文

模拟中的建筑在承受地震之前,通常还要先完成一项任务:在重力作用下站稳。接下来的计算既要继承结构已经受载的状态,又要引入运动、惯性和另一套求解过程。OpenSees 将结构模型与推进模型状态的对象分开,让这一步交接成为现实。这样的分工贯穿了它的整个架构。[2][5]

OpenSees 由太平洋地震工程研究中心(PEER)开发,是用于模拟结构及其周围土体的开源框架。[1] 跟随一个模型切换分析方式,再看看软件所说的“成功”究竟指什么,它的用途也就更为清楚。

加州大学伯克利分校地震工程实验室内,振动台上立着一座三层钢试验框架,参观者聚集在周围。
2022 年 6 月 24 日,PEER 在加州大学伯克利分校里士满野外站举行振动台演示,图中为三层 REPEAT 框架。照片来源:PEER / 加州大学伯克利分校。[11] 这幅实验室照片展示了地震模拟所对应的实体试验环境,与下文讨论的验证研究分属不同场合。

模型的状态存放在哪里

OpenSees 将这个容纳模型的地方称为模型域(Domain)。其中存放着描述有限元模型的节点、单元、荷载模式和约束。节点标示模型中用来描述位移的点,单元则以力学关系将这些点连接起来。模型的当前状态也保存在这里。[2]

分析对象 Analysis 负责计算状态如何变化。在 2010 年发表的架构论文中,Frank McKenna、Michael H. Scott 和 Gregory L. Fenves 描述了一种由可替换对象组合而成的分析方式。数值方法可以随之更换,原有的结构模型则得以保留。[2]

对软件开发者来说,这是“关注点分离”的具体用法。对运行模型的人来说,它对应着一个实际问题:计算中的哪一部分需要改变?

一个求解步中的六项分工

分析命令直接体现了这套分工。[3]

命令 职责
constraints 选择将运动约束引入方程的方式。
numberer 将节点的自由度映射到方程编号。
system 选择线性方程组的存储方式和求解器。
test 判断是否满足收敛准则。
algorithm 组织求解非线性方程的步骤。
integrator 建立方程,并将方程解用于更新响应。

system 与 algorithm 的区别在这里尤为重要。求解线性方程组只是非线性求解过程中的一个环节。线性求解器的选择只确定了这一环,计算如何逼近非线性平衡还需要另作安排。[3]

积分器的职责还包括步长选择以外的工作。它定义预测步、待求解的矩阵与残差,以及对响应的修正。静力分析中的响应涉及位移;瞬态分析中的响应还包括速度和加速度。[4] 因此,更换积分器也会改变计算下一状态的方式。

这些组件要先于分析对象指定。analysis Static 和 analysis Transient 命令分别组装不同类型的分析,随后由 analyze 启动已经组装好的计算过程。[7][8]

地震开始时,保留重力加载的状态

设想一个示例模型,它的重力分析已经成功完成,各构件已经受载。地震计算开始时,应当延续这一状态。

wipeAnalysis 命令清除分析对象,同时保留模型状态。文档明确列举了它的一项用途:从重力加载转入地震响应分析。这里还要留意,模型域的时间会保留,已有荷载也会继续起作用。[5]

因此,切换时有两件事要分别处理。替换分析组件,调整的是数值求解过程;将既有重力荷载固定下来,决定的是这些荷载在后续计算中如何作用。

对于后一项工作,loadConst -time 0.0 会将模型域中已有的荷载模式固定为常量,并把模型域的时间重置为零。在这次调用之后添加的荷载模式不受这次固定操作影响。[6] 按照这一顺序,先完成重力加载,再将其荷载固定,最后引入地震荷载。

在较长的脚本里,这一区别容易被忽略。清除分析对象之后,荷载仍按原有方式作用;将时钟归零之后,结构仍保有加载形成的状态。这些命令作用于模拟的不同部分,执行顺序也就带有物理含义。[5][6]

返回“成功”说明了什么

analyze 命令成功时返回零,失败时返回负值。[8] 外层脚本可以据此决定是否继续运行。不过,要解释这个零,还得先了解所配置的验收规则。

以 test NormDispIncr 为例,它检查线性方程组解向量的范数。这个向量通常对应位移修正量,具体含义取决于积分器和约束处理器。该命令还指定了容差与最大迭代次数。[9]

这是一项决定迭代何时停止的数值准则。材料假设是否符合试件特性、选定的响应是否与实测相符,都在这项检查的范围之外。

其中一个选项尤其能说明问题:当检验的 pFlag 值设为 5 时,即使在迭代次数上限内仍未收敛,它也会在打印失败信息的同时返回检验成功的结果。[9] 如果脚本把每一次成功状态都当作已满足容差的证据,就会误读自身的配置。

从这套架构可以看到,“成功”的定义由分析配置给出。要解释计算结果,就要同时查看当时使用的检验设置。

最终仍要看实测结果

一项独立研究让这一区别有了具体依据。在 2021 年发表于 PCI Journal 的论文中,Shane Oh 及其同事用已发表的预制混凝土框架振动台实测数据,评估了他们的 OpenSees 建模方法,同时还与 DRAIN-2DX 中的模型作了比较。[10]

吻合程度取决于所考察的响应。层间位移峰值和楼层位移与试验结果吻合较好,绝对速度与绝对加速度的峰值偏差总体更大。作者认为这些模型足以满足该研究的目的,而研究重点正是层间位移和楼层位移。[10]

阅读一项验证结论时,可以据此逐一辨明:检验的是哪种响应,采用了什么证据,服务于什么研究目的。某一输出的吻合程度,只能直接说明该项比较;其他输出的精度还要分别检验。

OpenSees 让数值计算中的各项选择清晰可见,也让它们能够分别替换。从重力加载转入地震分析的过程,展示了这种灵活性的作用:计算方法改变,结构仍可延续此前的受载状态。与试验的比较则引出了下一步要回答的问题——所得模型能否重现研究所要理解的行为。

资料来源

  1. 加州大学伯克利分校研究网站,“Pacific Earthquake Engineering Research Center”——OpenSees 的用途及所属机构背景。
  2. Frank McKenna、Michael H. Scott 和 Gregory L. Fenves,“Nonlinear Finite-Element Analysis Software Architecture Using Object Composition”,Journal of Computing in Civil Engineering,24(1),2010 年,第 95–107 页——Domain、Analysis 与可替换的数值计算组件。
  3. OpenSees 文档,“Analysis Commands”——六类分析组件的职责;查阅日期:2026 年 11 月 1 日。
  4. OpenSees 文档,“integrator Command”——预测、方程建立与响应修正。
  5. OpenSees 文档,“wipeAnalysis Command”——清除分析对象,同时保留模型状态、时间以及仍在起作用的荷载。
  6. OpenSees 文档,“loadConst Command”——将已有荷载模式固定为常量,并可选择重置模型域时间。
  7. OpenSees 文档,“analysis Command”——创建静力分析与瞬态分析,以及指定各组件的先后顺序。
  8. OpenSees 文档,“analyze Command”——运行分析步及解释返回值。
  9. OpenSees 文档,“Norm Displacement Increment”——容差、迭代次数上限、解向量的含义及 pFlag 5 的例外行为。
  10. Shane Oh、Yahya C. Kurama、Jon Mohle 和 Brandt W. Saxey,“Seismic design and analysis of precast concrete buckling-restrained braced frames”,PCI Journal,2021 年 9–10 月——依据此前试验数据开展的独立评估;“Nonlinear model validation”,第 69–71 页。
  11. PEER,“50th Anniversary of UC Berkeley Shaking Table”,2022 年 7 月 20 日——6 月 24 日演示中三层 REPEAT 框架照片的来源。
Previous 把研究照片迁入 Tropy,从一封完整的信开始

Recommended In oss

Matched by subject and format