测试版本:
openseespy==3.5.1.3
测试代码:
import openseespy.opensees as ops
# 清除之前模型
ops.wipe()
# 创建2维模型 (每个节点有3个自由度: UX, UY, RZ)
ops.model('basic', '-ndm', 2, '-ndf', 3)
# 创建节点 - 将节点2移动到与节点1相同位置
ops.node(1, 0.0, 0.0)
ops.node(2, 0.0, 0.0) # 与节点1相同位置
# 定义边界条件 (固定节点1的所有自由度)
ops.fix(1, 1, 1, 1) # 固定UX, UY, RZ
# 节点2: 固定平动自由度,释放转动自由度
ops.fix(2, 1, 1, 0) # 固定UX, UY, 释放RZ
# 定义材料 (转动弹簧)
ops.uniaxialMaterial('Elastic', 1, 100.0) # 转动刚度100 kN·m/rad
# 创建零长度元素 (仅提供转动刚度)
ops.element('zeroLength', 1, 1, 2,
'-mat', 1,
'-dir', 3) # 方向3对应转动自由度RZ
# 定义时间序列和荷载模式
ops.timeSeries('Linear', 1)
ops.pattern('Plain', 1, 1)
# 在节点2施加弯矩 (绕Z轴)
ops.load(2, 0.0, 0.0, -100.0) # Fx, Fy, Mz
# 设置静态分析
ops.system('BandSPD')
ops.numberer('RCM')
ops.constraints('Plain')
ops.algorithm('Linear')
ops.integrator('LoadControl', 1.0)
ops.analysis('Static')
# 执行分析
if ops.analyze(1) == 0:
# 获取节点2的位移和转角
disp = ops.nodeDisp(2)
print("节点2的位移和转角 (UX, UY, RZ):", disp)
print("节点2的转角 (RZ):", disp[2], "rad")
else:
print("分析失败!请检查模型约束条件")
测试截图: