OpenSees自学笔记.docx

上传人:b****0 文档编号:9493091 上传时间:2023-05-19 格式:DOCX 页数:28 大小:654.13KB
下载 相关 举报
OpenSees自学笔记.docx_第1页
第1页 / 共28页
OpenSees自学笔记.docx_第2页
第2页 / 共28页
OpenSees自学笔记.docx_第3页
第3页 / 共28页
OpenSees自学笔记.docx_第4页
第4页 / 共28页
OpenSees自学笔记.docx_第5页
第5页 / 共28页
OpenSees自学笔记.docx_第6页
第6页 / 共28页
OpenSees自学笔记.docx_第7页
第7页 / 共28页
OpenSees自学笔记.docx_第8页
第8页 / 共28页
OpenSees自学笔记.docx_第9页
第9页 / 共28页
OpenSees自学笔记.docx_第10页
第10页 / 共28页
OpenSees自学笔记.docx_第11页
第11页 / 共28页
OpenSees自学笔记.docx_第12页
第12页 / 共28页
OpenSees自学笔记.docx_第13页
第13页 / 共28页
OpenSees自学笔记.docx_第14页
第14页 / 共28页
OpenSees自学笔记.docx_第15页
第15页 / 共28页
OpenSees自学笔记.docx_第16页
第16页 / 共28页
OpenSees自学笔记.docx_第17页
第17页 / 共28页
OpenSees自学笔记.docx_第18页
第18页 / 共28页
OpenSees自学笔记.docx_第19页
第19页 / 共28页
OpenSees自学笔记.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

OpenSees自学笔记.docx

《OpenSees自学笔记.docx》由会员分享,可在线阅读,更多相关《OpenSees自学笔记.docx(28页珍藏版)》请在冰点文库上搜索。

OpenSees自学笔记.docx

OpenSees自学笔记

OpenSEES自学笔记

(一)

“博主按”:

本文是我第一次用OpenSEES做仿真分析作业(基于OpenSEES的方钢管混凝土柱抗震性能分析)过程中点滴记录的自学笔记,发表出来既是和各位(尤其是OpenSEES初学者)交流,同时也算作个自我小结以备日后查阅。

尽管我力求完美,但这些习得中仍然极有可能存在错误!

请注意甄别!

同时也衷心希望各位高手不吝赐教!

另外,由于时间仓促,本人又是初学OpenSEES,所以文章内容上比较零散,见谅!

 

初识OpenSEES

我是在《钢筋混凝土结构非线性分析》这门课上第一次听说这个软件的。

老师说(均为个人理解,可能不是老师原话)这个软件能够用纤维单元做有限元分析,在模拟大型结构上比ANSYS、SAP等利用实体单元的有限元程序有优势;经常用于抗震分析科研中;不是一个“设计型”软件(如SAP、PKPM、桥博等);还要求我们用它做两个大作业。

 

在SilviaMazzoni,FrankMcKenna,MichaelH.Scott,GregoryL.Fenves等人编写的OpenSEES的UsersManual(v2.0)开篇,是这样回答"WhatisOpenSEES?

"这个问题的:

·Anobject-orientedsoftwareframeworkforsimulationapplicationsinearthquakeengineeringusingfiniteelementmethods.OpenSeesisnotacode.

 

·AcommunicationmechanismwithinPEERforexchangingandbuildinguponresearchaccomplishments.

 

·Asopen-sourcesoftware,ithasthepotentialforacommunitycodeforearthquakeengineering.

 

好吧,既然是专业软件,那咱就在接下来的使用中逐渐熟悉吧!

 

软件下载与安装

OpenSEES和Tcl的下载页面链接在OpenSEES官网首页左侧的栏目里,点击“Download”即可进入下载页面(下载之前需要注册(新用户)或填写电邮(已注册用户))。

 

我的电脑用的是64位的Win7(2012年5月23日11:

44:

48更新:

Win7旗舰版SP1),"ActiveTcl8.5.11.0.295402-win32-ix86-threaded"安装成功。

安装路径按照官网说明手动作了修改(即将安装路径由默认的C:

\Tcl改为C:

\ProgramFiles\Tcl)。

 

注意:

必须以管理员身份运行ActiveTcl安装程序(在安装包上右击,选择“以管理员身份运行”),否则会安装失败!

 

OpenSEES的运行界面如下图所示。

 

 

小技巧:

可能由于TclEditor(下文将介绍)是绿色软件,系统默认并没有把tcl文件和TclEditor关联起来,而且一般也没有建立tcl文件的其它关联方式,所以如果直接双击tcl文件不仅无法打开它,还会弹出错误提示对话框(提示无法识别该tcl文件头几行)!

如果你想实现双击tcl文件调用TclEditor进行编辑的话,可以自行更改文件关联。

具体操作就是在任意一个tcl文件上右击,选择打开方式,然后通过“浏览”找到TclEditor.exe这个可执行文件(一般应该是在C:

\TclEditor\bin\下),并勾上始终用该程序打开此类文件选项,确认。

 

以下大致总结下自行摸索的OpenSEES一般编程规律、技巧。

关于这次作业具体的心得在这篇博文里:

《OpenSEES自学笔记

(二)》。

(两篇写一起既乱且长。

 

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

单位

OpenSEES中是可以用公制单位(N,m)的(而并不是像某些文章中说的“OpenSees默认为英制单位”)。

实际上我认为OpenSEES中并没有什么默认单位,只要编程者自己保持单位一致就行;这点类似于SAP2000的风格。

 

建模顺序

做事要讲究顺序,OpenSEES建模亦如是:

必须先定义材料才能离散截面(因为离散截面时要对所划分的截面指定材料属性)。

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

 

关于BandSPD求解方式

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

"Thisisagoodchoiceformostsmallsizemodels."

并且后面紧跟了一句:

"TheequationshavetobenumberedsothewidelyusedRCM(ReverseCuthill-McKee)numbererisused."

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

(不过直到作业做完,我对numberer,system,test,algorithm,analysis(还包括geomTransf,constraints)等求解控制命令还是一知半解!

我觉得要想弄明白这些命令——得先回头好好翻翻有限元和数值分析的书了!

 

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

“0.1000000000000001≠0.1”:

(自行总结,未找到官方说明)这是一个真实的故事:

我曾在程序中自以为是的将一连串相邻均只有0.1左右的数的差强行赋值为0.1,而没有采用循环命令将两数作差并将结果赋给新变量——其中即有这样的强行截断!

我以为小数点后都n位了,即使我带着它最后也会被系统截断,还不如我直接预处理来得清爽!

没想到这样做直接导致计算不收敛!

真是失之毫厘谬以千里!

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

后来我还在老师给的一份范例程序(SilviaMazzoni&FrankMcKenna,2006)中发现了这么一段:

 

……

setUbig1.e10;#areallylargenumber

setUsmall[expr1/$Ubig];#areallysmallnumber

……

 

可见系统并未认为Usmall=0!

再一次印证了这一点!

 

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

划分纤维截面时角点坐标输入非常有讲究!

为了说的直白,我把要点放到下面这张图中了:

数据文件处理

OpenSEES运行中是可以生成并读写txt文档的!

注意我说是“读写”哦!

(生成txt文档的好处是方便运行完后双击生成的数据文件读取数据,你懂的。

 

Tcl编程语法

(1)命令流中不能出现中文标点(这一点和C语言编程类似)!

(否则运行时DOS窗会停住,给出警告,表明不识别命令流中的中文标点。

 

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

如:

if{$a>0}{

setb3}else{

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

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

 

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

 

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

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

 

(5)引用变量时,要在变量名前加上$(美元符号)!

这个步骤非常琐碎,不如C语言编程简洁。

大家就忍着点吧!

 

运行方法

目前我知道至少有两种:

 

方法一:

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

优点:

个人认为没有

缺点:

命令流编辑时易犯格式错误,每次运行都需运行OpenSEES,再在那个黑框里敲命令流,各种不方便!

(其实这个方法只是说说而已,实际我从来没用过。

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

 

方法二:

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

我目前一直用的是TclEditor。

它的优点有:

可以用不同颜色区分不同功能语句;还有“查找”、“加注释”、“取消注释”等基本常用功能;更好的是菜单栏有个按钮直接与OpenSEES关联,点击就可以调用OpenSEES求解,比较方便(当然,比起VisualStidio之类的还是差远了!

可惜谁叫OpenSEES是这么小众呢?

)。

但这个软件有个非常大的缺点——编程者无法获知当前所编辑文档的路径!

如果你需要在编程时参考其他文件夹下同样名字的文件(这样的情况在我这次做作业时经常发生,因为我编辑的文档和模板文档文件名相同),把两个文件都用TclEditor打开后,你稍一不留神,就会忘了你当前编辑的文档到底是哪里的文件!

那时可真是麻烦!

所以我总结,这就要求编程者:

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

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

说句题外话,我认为一个好的专业软件应该做到让用户大部分时间只需要考虑专业相关的东西,而不必操心其他。

所以我想,如果以后自己需要经常用OpenSEES的话,看能不能用其他的编译器,不用这个TclEditor了。

 

计算不收敛,怎么办?

可以考虑如下几点:

1、材料本构设定是否正确?

——材料本构参数是否合理?

而且有时steel01比steel02、concrete01比concrete02好收敛,如果可以的话不妨改改材料模型。

2、是否极限位移给的过大,柱子已经破坏?

——把极限位移改小一点试试。

(这是针对我这次作业而言)

3、是否收敛容差太苛刻?

——把容差改大一点试试。

(尽管这也许并不是真正解决问题的办法!

 

调试程序的技巧:

控制变量法

控制变量法大家应该很熟悉了。

调试程序中我的经验是:

一次改动的参数不要太多,改动的是哪些变量自己要记得。

最好一次只改一个变量。

然后根据运行结果随所作改动变化的规律,及时将变量修改到合适的值。

这样做看起来慢,其实我觉得是步步为营,效率比较高。

(这些其实应该是编程的通用技巧,经常编程的朋友们应该都有体会。

 

建议在程序中多用公式

一个比较好的编程习惯是,程序里能输公式的地方就输公式,让用户只需要给定几个基本参数。

不要自己事先把中间量在草稿纸上算出来然后输到程序里——这样不仅程序通用性不高,而且计算精度也没有电脑算的高(我前面已经说过,OpenSEES中默认计算精度是非常高的!

),真是“吃力不讨好”!

 

关于wipe命令后面的分号

上文说过,如果一条命令后面(同一行中)没有其他命令或注释,那么该命令末尾既可以带分号,也可不带。

但是我发现对于wipe命令则不然:

因为在TclEditor中可以发现,如果wipe末尾带了分号(该行再无其他字符),wipe这个单词是黑色的;但若去掉该分号,wipe就变成了绿色——从颜色变化上猜测,莫非加了分号导致wipe命令不被识别?

再考虑到下文将提到的“OpenSEES似乎存在计算不稳定现象”与wipe命令间千丝万缕的暧昧关系,对于wipe这个“黑匣子”我还是保守处理——去掉末尾的分号吧!

事实证明去掉分号后貌似有几次曾经不收敛的计算神奇般的收敛了!

 

疑问:

OpenSEES计算结果似乎不太稳定?

具体表现就是,你现在运行某个命令流算题,计算收敛,得到解了;然后你根本就不改程序,甚至连TclEditor都关了,更甚至连电脑都关了,等会再重新运行这个命令流,有可能不收敛!

我遇到过很多次这个现象,还有同学出现刚开始算不通过,后来啥也没改,重新运行——竟然顺利通过了!

难道是内存调用错误?

可程序开头不是由wipe命令吗?

或许这个wipe根本就不像官网上介绍的那样每次运行都能彻底destory内存中所有之前建的模型、对象?

(当然也不排除我们在两次结果不同的计算中间无意改动了程序某个部分而自己又忘了——毕竟调试程序很复杂,控制变量法调n个参数,特别像我们这种初学者,一调就几个小时,最后是头晕眼花,腰酸背疼……所以偶尔忘记自己对程序细微的改动也是可能的……

 

关于elementrecorder里轴力和剪力的正方向

elementrecorder里记录的轴力和剪力的正方向是怎样的?

UserManual里的解释是:

Theseforcescorrespondtotheglobalcoordinateaxesorientation.

我的理解图解如下图所示(图中剪力和轴力都为正):

 

其他

两个英制单位换算:

1、kip——onethousandpoundsforce,千磅力,约相当于4,445.205226N≈4.45kN。

2、重力加速度g≈9.8m/s^2≈385.8inch/s^2。

 

在学习OpenSEES中常见的英文缩写、专业英语术语:

OpenSEES:

OpenSystemforEarthquakeEngineeringSimulation

NSF:

NationalScienceFoundation

PEER:

PacificEarthquakeEngineeringResearchCenter(为什么不缩写成PEERC呢?

NEES:

NetworkforEarthquakeEngineeringSimulation

PBEE:

Performance-BasedEarthquakeEngineering

portalframe:

门式刚架,龙门架(planarportalframe:

平面门式刚架)

ndm:

numberofdimensionspernode

ndf:

numberofdegreesoffreedompernode

translation:

uniformmotionofabodyinastraightline刚体位移,线位移

normal:

【数】法线rotationabouttheplane'snormal绕平面法线的转动

prompt:

提示。

(个人理解:

指DOS窗中一闪一闪的光标,学名“命令提示符”。

a-priori:

先验的。

(begenerateda-priori,个人理解:

即“事先编辑好的”)

geometry:

几何尺寸

element:

单元

component:

(地面运动的)分量

drift(angle):

位移角

uniaxial:

oforrelatingtoonlyoneaxis,单轴的

timeseries:

asetofdatacollectedsequentiallyusuallyatfixedintervalsoftime,时间序列

argument:

oneoftheindependentvariablesuponwhosevaluethatofafunctiondepends,自变量,参数

nodalload:

节点荷载(这个词组读起来有点绕口^_^)

flag:

标志变量(学过C语言编程的同学应该知道!

discretization:

离散化

offset:

偏移(量)

iteration:

迭代(法)

SOE:

systemoflinearequations,线性方程系统

NewtonwithLineSearchAlgorithm:

线性搜索路线牛顿算法(这个翻译可能不准确)

BandSPD:

BandedSymmetricPositiveDefinite

map:

映射

 

关于OpenSEES的学习资料:

来自官方:

1、OpenSeesUser(里面有详细的帮助文档)

2、ExampleMannul(官网提供的帮助手册)

3、OpenSees官网提供的Tcl编程教程

4、网页版用户手册(09年版)

5、OpenSeesNavigator

(OpenSeesNavigatorisamatlabinterfaceforOpenSees.Itallowsuserstoquicklycreatemodels,performanalysis,andlookattheresults.Itrunsonwindowsmachines.)

6、BasicExamplesManual

(TheobjectiveofthisprimeristoprovidenewusersofOpenSees(OpenSystemforEarthquakeEngineeringSimulation)familiarstructuralengineeringexamplesasaconvenientmethodforlearninghowtousethesoftware.)

原创教程及其他:

1、转[教程]OpenSEES超简单易懂的入门第一课

2、OpenSEES最好的介绍

(这个讲了一些数值模拟的本质,比较理论化。

3、结构艺术家_刘金成的博客

玩转opensees~e.g.1

玩转opensees~e.g.2暨sap2000vsopensees(IV)

4、(XX文库)L形钢管混凝土柱抗震性能非线性有限元分析

5、(豆丁)OpenSees使用与教程

(一个豆单,里面有5篇文章。

其中:

《OpenSees》这篇是节选自一篇重庆大学硕士论文中关于OpenSees的部分,个人感觉写得很好。

6、(中华钢结构论坛)用过OpenSees的前辈请进来帮帮我!

(顺便说一下,这个论坛话题讨论质量很高,经常有高手出没!

7、厦门大学建筑与土木工程学院古泉副教授创办的OpenSees学习网站

(以前印象中厦大只有文科,浏览了这个网站后我再不敢这么想了……)

8、推荐一个QQ群:

61667191(Opensees与地震工程2),感兴趣的话可以加入;里面都是OpenSEES高手与爱好者,讨论的基本都是学术方面的事情。

9、dinoChen的博客

(这是陈学伟博士的个人网站,他还有个QQ空间,两个网站上都有非常丰富的优质原创资源!

陈博士实乃青年才俊!

佩服!

上面提到的QQ群也是他创建的!

10、《TCL/TK编程实践》第四版……——icelamp的专栏——CSDN博客

11、Tcl简介——维基百科

 

最后,谨摘录两段高手的OpenSEES的学习心得,与君共勉。

感谢原作者!

 

ocean2000:

“我的当初毕业论文也是用os做试验仿真的,台湾有一篇砌体结构实验用os来仿真的,可以google之,os有一些可以模拟的2D单元。

这个程序只要过一遍mannual,使用一点不难,而且资料也很多了,它的论坛不错,问题的讨论很积极。

要加新单元和新材料也不难,接口都给大家提供好了。

其实这个软件的一大优点是TCL/TK很容易上手,对于计算过程可以加入自己的判断和控制条件,所以可以做出很好的滞回曲线,还可以动态显示曲线发展过程。

非常难得的是在工作中居然看到单位的软件有与opensees的数据转化接口。

 

dinochen1983:

“学习OPENSEES要求一定的有限元知识及非线性理论,最好会编程,因为建模需要用编程的思想去简化重复输入,本人觉得OPENSEES值得大家好好学习,我学了半年,收获很多。

 

OpenSEES自学笔记

(二)

2012-04-1710:

49:

15|分类:

业务|字号订阅

下面要小结的是我在做第一次OpenSEES仿真分析作业中具体针对这次作业的疑问和收获,最后还将大致展示下分析结果。

这次作业是模拟位移控制下方钢管混凝土柱(取材于吕西林、陆伟东完成的一次试验[1]。

计算高度800mm,外围钢管宽200mm,厚4mm,轴压比0.5;钢材

,用steel02模拟;内填混凝土

,用concrete02模拟。

本构参数计算参考Mander[2]和蔡健等人[3]提出的公式)的抗震性能。

我先是做了模拟滞回曲线和试验滞回曲线的对比分析,然后又分别以轴压比、内填混凝土强度和宽厚比对柱抗震性能的影响为题做了参数分析。

先说遇到的疑问吧。

为什么模拟的滞回曲线经常不关于原点对称?

我的设计意图是给定一系列最大位移值,算出下每个最大位移值下从零→正向最大位移→零→负向最大位移→零的位移步序列,然后用位移控制加载。

柱在加载正、反向尺寸、刚度、材性相同。

所以我认为滞回曲线应该是关于原点对称的。

可是模拟出来n个曲线,几乎都不符合我的预期!

随便举一例:

此图是我模拟得到的一个滞回曲线,可以很明显看出曲线关于原点不对称!

这是为什么?

用位移控制作滞回分析时,最大位移序列及步长如何确定?

我发现一个奇怪现象:

同样一根柱,在其他参数不变的情况下,仅改变最大位移序列(这个本来就是应该由用户指定),就会影响结果的收敛性(当然,不是指因位移设置过大使柱破坏的情况)。

例:

我曾经分析过一个柱,当最大位移序列为"27121720"时,计算收敛;而当序列为"281420"时,就不收敛了!

再例如:

当最大位移序列为"13591114"时可能计算不收敛,而改变下步长,甚至加大位移,如改为"13591215"——反而可能收敛!

这种现象带来一个很大的麻烦:

我根本无法较准确的知道某个柱的极限位移!

因为有时会出现(例如)最大加到12mm时不收敛,改变步长后最大到14mm却收敛了!

但再继续往大的加,又有可能不收敛……而我不可能一直这么尝试下去——所以在确定最大位移时显得主观性很强!

这恐怕也是这次练习中最严重的潜在问题了!

再分享一点收获:

这次OpenSEES命令流编写给我在编程方面两个启示:

1、编程中可以用生成存储向量的文件这一方法来模拟动态一维数组。

以前我用C语言编程遇到需要动态一维数组时总是用指针加malloc命令模拟,但这还不是彻底"动态"——程序需要在此之前确定动态数组的长度。

而现在把未知数量的数据(可能是用户输入,也可能是程序生成的中间数据)存入文件,就能实现真正意义上的"动态"了。

2、在编制一个较复杂的程序时,把功能不同的函数各自做成单独的"子函数"文件,而主函数文件仅仅主要起调用这些子函数文件的作用——是一个不错的编程习惯,因为这样充分体现了模块化思想。

例如在这次编程中,我起先是按习惯把所有函数写到一个文件里,结果最后文件很长,给阅读、调试程序带来很大麻烦(当然,这也与TclEditor没有像VisualStudio那样的"折叠"功能有关)。

后来参考老师给的模板程序,把各个子函数存放到不同的子函数文件中——这样一来各个文件的长度都比较短,读起来很清爽,而且编辑、调试时自己非常清楚当前编辑的是哪一个功能模块。

Steel01和Steel02的对比

为了解这两种材料本构模型的区别,我在这次作业建立的模型基础上做了一个小试

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2