引言
不管是静力或是动力分析,OpenSees基本都遵循:系统设置——节点——支座——质量——材料——截面——单元——荷载——分析,这一流程。本文将根据OpenSees官方的例子Example 1a介绍对一个柱构件进行Pushover分析,在此之前会介绍需要用到的命令及其用法。
命令
TCL命令
file mkdir
创建目录。
file mkdir Data; # 创建目录Data
puts
输出字符串,注意要用双引号。
OpenSees > puts "hello world!"
hello world!
set
定义变量,注意在tcl
中调用变量要加$
号。
OpenSees > set a 1
1
OpenSees > puts $a
1
OpenSees命令
wipe
该命令用于销毁所有构建的对象,即模型的所有组件、分析的和记录器。
model
该命令用于定义模型的空间维度和节点的自由度数量。
model basic -ndm 2 -ndf 3; # 二维三自由度
node
该命令用于构造一个节点对象。
node 1 0.0 0.0; # 坐标为(0,0)的节点1
node 2 0.0 120.; # 坐标为(0,120)的节点2
fix
该命令用于构建单点齐次边界约束。
fix 1 1 1 1; # 节点 1: 全部固定
fix 2 0 1 0; # 节点 2: 只固定Y方向
mass
该命令用于设置一个节点的质量。
mass 2 2.5 0.0 0.0; # 节点2在X方向的质量为2.5
geomTransf Linear
该命令用于构造线性坐标变换对象,该对象执行梁柱单元刚度和抗力从局部坐标系到全局坐标系的线性几何变换。假设有两个单元分别为element1和element2,其模型如图所示,两个单元对应不同的坐标变换。
geomTransf Linear 1 0 0 -1; # 编号为1的坐标转换,局部Z轴 = - 全局Z轴
geomTransf Linear 2 0 1 0; # 编号为2的坐标转换,局部Z轴 = 全局Y轴
坐标转换1用于element1,坐标转换2用于element2。
element elasticBeamColumn
该命令用于构造弹性梁柱单元对象。构建弹性梁柱单元的参数取决于问题的维度。
对于二维问题:
element elasticBeamColumn $eleTag $iNode $jNode $A $E $Iz $transfTag
下述命令构造了编号为1的单元,两端节点分别为节点2和节点4,横截面积为5.5,弹性模量为100,惯性矩1e6,使用编号为1的坐标转换。
element elasticBeamColumn 1 2 4 5.5 100.0 1e6 1;
recorder Node
节点记录器可以记录在每次收敛后节点的响应。
recorder Node -file nodesD.out -time -node 1 2 -dof 1 2 disp; # 记录节点1、2在X、Y方向的位移到nodesD.out
nodesD.out
文件中第1列是时间,第2列是节点1在X方向的位移,第3列是节点1在Y方向的位移,以此类推。
disp
可更换为下列选项:
disp | 位移 |
vel | 速度 |
accel | 加速度 |
incrDisp | 位移增量 |
eigen i | 模态i的特征向量 |
rayleighForces | 阻尼力 |
pattern Plain
构建静力荷载工况。每个静力荷载工况都与一个时间序列相关联,可以包含多个节点荷载、单元荷载和单点约束。在该命令后面的{}
中包含了生成该工况所需的所有荷载和单点约束。
pattern Plain 1 Linear {
load 2 0. -2000. 0.;
eleLoad -ele 1 -type -beamUniform 2000.;
eleLoad -ele 2 -type -beamUniform 0 2000.;
eleLoad -ele 3 -type -beamUniform 0 0 -2000.;
};
上述命令创建了编号为1的静力荷载工况,时间序列为线性的时间序列,该工况包含了一个节点荷载(节点2在Y方向上的荷载为-2000),3个单元荷载(单元1在局部Y方向上的均匀荷载为2000,后面两个分别是单元2、3在局部Z、X方向的荷载)。
constraints
该命令用于构造约束处理器对象。约束处理器对象决定了在分析中如何强制执行约束方程。
constraints Plain;
Plain
可更换为下列选项:
Plain |
Lagrange |
Penalty |
Transformation |
numberer
该命令用于构造一个自由度编号对象,以提供节点上的自由度和方程编号之间的映射。
numberer Plain;
Plain
可更换为下列选项:
Plain |
RCM |
AMD |
system
该命令用于构造系统的线性方程组和线性求解器对象,以存储和求解分析中的方程组。
system BandGeneral;
BandGeneral
可更换为下列选项:
BandGeneral |
BandSPD |
ProfileSPD |
SparseGEN |
UmfPack |
FullGeneral |
test NormDispIncr
该命令用于构建收敛测试,当分析的位移增量与应用于模型的位移增量相差小于设定值时,认为分析模型收敛。
test NormDispIncr 1.0e-8 6;
algorithm
该命令用于构造一个求解算法对象,它决定了求解非线性方程的步骤顺序。
algorithm Newton;
Newton
可更换为下列选项:
Linear |
Newton |
NewtonLineSearch |
ModifiedNewton |
KrylovNewton |
SecantNewton |
BFGS |
Broyden |
integrator LoadControl
该命令用于构造一个位移控制器,根据设定值在一步分析中施加位移增量。
integrator LoadControl 0.1;
analysis Static
该命令用于构建一个静力分析对象。
analyze
该命令用于执行分析,可以设定执行多少步。每一步中通过integrator
命令施加增量,用algorithm
命令定义的算法求解新的非线性方程,通过test
命令定义的收敛测试判断求解是否收敛,如果收敛则执行下一步。
analyze 10; # 执行10步
loadConst
该命令用于设置当前分析的时间。
loadConst -time 0.0; # 重置分析时间
例子
对下图所示的柱构件进行建模并执行Pushover分析。
wipe;
model basic -ndm 2 -ndf 3;
file mkdir Data;
# 建模
set LCol 400;
node 1 0 0;
node 2 0 $LCol;
fix 1 1 1 1;
mass 2 5. 0. 0.;
geomTransf Linear 1;
element elasticBeamColumn 1 1 2 3600000000 4227 1080000 1;
# 设置记录器
recorder Node -file Data/DFree.out -time -node 2 -dof 1 2 3 disp;
recorder Node -file Data/DBase.out -time -node 1 -dof 1 2 3 disp;
recorder Node -file Data/RBase.out -time -node 1 -dof 1 2 3 reaction;
# 重力分析
pattern Plain 1 Linear {
load 2 0. -2000. 0.;
};
constraints Plain;
numberer Plain;
system BandGeneral;
test NormDispIncr 1.0e-8 6;
algorithm Newton;
integrator LoadControl 0.1;
analysis Static;
analyze 10;
loadConst -time 0.0;
# Pushover分析
pattern Plain 2 Linear {
load 2 2000. 0.0 0.0;
}
integrator DisplacementControl 2 1 0.1;
analyze 1000;
puts "Done!"