opensees解题技巧

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OpenSEES解题一般规律、技巧总结

单位

OpenSEES中是可以用公制单位(N,m)的(而并不是像某些文章中说的“OpenSees默认为英制单位”)。实际上我认为OpenSEES中并没有什么默认单位,只要编程者自己保持单位一致就行;这点类似于SAP2000的风格。

建模顺序

做事要讲究顺序,OpenSEES建模亦如是:必须先定义材料才能离散截面(因为离散截面时要对所划分的截面指定材料属性)。

与之类似的,必须先定义(离散)截面,才能定义非线性梁柱单元(因为定义非线性梁柱单元时要指定单元截面)。

关于BandSPD求解方式

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

"This is a good choice for most small size models. "

并且后面紧跟了一句:

"The equations have to be numbered so the widely used RCM (Reverse 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语言编程简洁。大家就忍着点吧!

运行方法

目前我知道至少有两种:

方法一:直接运行OpenSEES,在"OpenSees >" 提示符后输入“source *.tcl”(“*.tcl”是提前编写好的命令流),然后回车。

优点:个人认为没有;

缺点:命令流编辑时易犯格式错误,每次运行都需运行OpenSEES,再在那个黑框里敲命令流,各种不方便!(其实这个方法只是说说而已,实际我从来没用过。)有的童鞋用

Ultra Editor之类的通用文本编辑软件写程序再导入OpenSEES运行,我没试过,估计应该没有下面说的第二种方法好。

方法二:借助第三方专用编译环境。

我目前一直用的是Tcl Editor。它的优点有:可以用不同颜色区分不同功能语句;还有“查找”、“加注释”、“取消注释”等基本常用功能;更好的是菜单栏有个按钮直接与OpenSEES关联,点击就可以调用OpenSEES求解,比较方便(当然,比起Visual Stidio 之类的还是差远了!可惜谁叫OpenSEES是这么小众呢?)。

但这个软件有个非常大的缺点——编程者无法获知当前所编辑文档的路径!如果你需要在编程时参考其他文件夹下同样名字的文件(这样的情况在我这次做作业时经常发生,因为我编辑的文档和模板文档文件名相同),把两个文件都用Tcl Editor打开后,你稍一不留

神,就会忘了你当前编辑的文档到底是哪里的文件!那时可真是麻烦!所以我总结,这就要求编程者:

1、每次在Tcl Editor里打开文件时,不要一看文件名对就急忙打开——还要看看这个文件是不是在正确的文件夹下面;

2、编程时最好一气呵成;长时间休息时最好把Tcl Editor关掉。

说句题外话,我认为一个好的专业软件应该做到让用户大部分时间只需要考虑专业相关的东西,而不必操心其他。所以我想,如果以后自己需要经常用OpenSEES的话,看能不能用其他的编译器,不用这个Tcl Editor了。

计算不收敛,怎么办?

可以考虑如下几点:

1、材料本构设定是否正确?——材料本构参数是否合理?而且有时steel01比steel0

2、concrete01比concrete02好收敛,如果可以的话不妨改改材料模型。

2、是否极限位移给的过大,柱子已经破坏?——把极限位移改小一点试试。(这是针对我这次作业而言)

3、是否收敛容差太苛刻?——把容差改大一点试试。(尽管这也许并不是真正解决问题的办法!)

调试程序的技巧:控制变量法

控制变量法大家应该很熟悉了。调试程序中我的经验是:一次改动的参数不要太多,改动的是哪些变量自己要记得。

最好一次只改一个变量。然后根据运行结果随所作改动变化的规律,及时将变量修改到合适的值。这样做看起来慢,其实我觉得是步步为营,效率比较高。(这些其实应该是编程的通用技巧,经常编程的朋友们应该都有体会。)

建议在程序中多用公式

一个比较好的编程习惯是,程序里能输公式的地方就输公式,让用户只需要给定几个基本参数。不要自己事先把中间量在草稿纸上算出来然后输到程序里——这样不仅程序通用性不高,而且计算精度也没有电脑算的高(我前面已经说过,OpenSEES中默认计算精度是非常高的!),真是“吃力不讨好”!

相关文档
最新文档