OpenSees自学笔记 下载本文

线性梁柱单元时要指定单元截面)。

关于BandSPD求解方式

官网关于BandSPD方程形式的评价:

\

并且后面紧跟了一句:

\Cuthill-McKee) numberer is used. \

可见numberer 类型不是随便选,而是要根据方程类型来决定的!

(不过直到作业做完,我对numberer, system, test, algorithm, analysis(还包括geomTransf,constraints)等求解控制命令还是一知半解!我觉得要想弄明白这些命令——得先回头好好翻翻有限元和数值分析的书了!

OpenSEES中默认的计算精度比较高!

“0.1000000000000001≠0.1”:(自行总结,未找到官方说明)这是一个真实的故事:我曾在程序中自以为是的将一连串相邻均只有0.1左右的数的差强行赋值为0.1,而没有采用循环命令将两数作差并将结果赋给新变量——其中即有这样的强行截断!我以为小数点后都n位了,即使我带着它最后也会被系统截断,还不如我直接预处理来得清爽!没想到这样做直接导致计算不收敛!真是失之毫厘谬以千里!可见在OpenSEES中默认的计算精度比较高!

后来我还在老师给的一份范例程序(Silvia Mazzoni & Frank McKenna, 2006)

中发现了这么一段:

……

set Ubig 1.e10; # a really large number set Usmall [expr 1/$Ubig]; # a really small number ……

可见系统并未认为Usmall=0 !再一次印证了这一点!

划分纤维截面时角点坐标输入的门道

划分纤维截面时角点坐标输入非常有讲究!为了说的直白,我把要点放到下面这张图中了:

数据文件处理

OpenSEES运行中是可以生成并读写txt文档的!注意我说是“读写”哦!(生成txt文档的好处是方便运行完后双击生成的数据文件读取数据,你懂的。)

Tcl编程语法

(1)命令流中不能出现中文标点(这一点和C语言编程类似)!(否则运行时DOS窗会停住,给出警告,表明不识别命令流中的中文标点。)

(2)if-else 语句中if和后面紧跟的大括号之间、else和前后大括号之间都要空一格。如:

if {$a>0} { set b 3} else {

set b -3}; #如果a大于0,则令b等于3,否则等于-3。

类似的,相邻的两个大括号(一个反大括号和一个正大括号)之间也必须有一个空格。

(3)Tcl语言对命令名、变量名区分大小写。

(4)一行一般只写一条语句;若想写多条,则各语句间应用分号隔开——当一行只有一条语句时,句末分号可有可无。

同时还有一种特殊情况,就是当在一条命令后(同一行中)加注释时,该命令末尾必须有分号以告知编译器该命令结束,否则编译器会认为该注释也是前面的命令的一部分,导致编译出错。

(5)引用变量时,要在变量名前加上$(美元符号)!这个步骤非常琐碎,不如C语言编程简洁。大家就忍着点吧!