Looking for something?

In Standard

在OpenSees中调用Matlab

在OpenSees中调用Matlab

在OpenSees中调用Matlab程序是一件让人觉得非常有趣的事情,因为Matlab有强大的数据处理能力,可以进行很多OpenSees无法完成的计算,最近一直在忙课题,进展非常困难,所以很长时间没有更新网站,但还是决定抽出时间记录一些小知识。以一个小桁架为例,不得不说明的是这个小例子是我在网站上搜到别人写的,我只是按照自己的理解写出来。

第一步:定义了一些变量,Amin和Amax分别为面积的上下限值,tol为容差,targetDisp为目标位移

第二步:定义了一个getA程序,通过读写文件的方式实现OpenSees与Matlab程序的相互调用,将桁架面积的上下限值写到data1,catch的参数是一个Tcl脚本,如果脚本正常完成,catch返回0,如果脚本出现错误,则返回1。exec的第一个参数是要运行的程序名,其他参数均为子进程的参数,matlab -nosplash -nodesktop -r表示matlab可以不启动图形界面运行,getA为执行文件的名字,为它传入参数quit,其与在命令行中输入的类似。运行matlab后,data2文件内会存入data1(1,1)与data1(1,2)的平均值。split命令可以将字符串分成几个部分,它包含两个参数,第一个参数是待分割的字符串,第二个参数是一个或多个分割字符,分割后形成列表,列表名定义为lines,采用lindex将lines中的第一个元素,并将其赋予A。

第三步:[getA $Amin $Amax]为调用getA程序,并将返回值赋给A

第四步:在OpenSees中建立桁架有限元模型,包括定义模型的节点、单元、约束、荷载和分析类型等

第五步:将节点4的1方向的当前位移赋给xDisp,将0赋给done。while为循环语句,只要done = 0成立,则重复循环执行,如果当前位移大于目标位移,则将当前面积设为面积的下限,如果当前位移小于目标位移,则将当前面积设为面积的上限,如果上下限的差值小于容差,则循环结束。

再次采用[getA $Amin $Amax]调用getA程序,并将返回值赋给A,采用setParameter -value $A -ele A这个命令更新单元的面积A,进行分析后,再次检查容差是否满足误差要求,如果满足,认为done等于1

第六步:在窗口中输出迭代结果。

参考文献:

Calling Matlab from a Scipt from http://opensees.berkeley.edu/

Tcl入门经典

0 Comment 1598 Views

Related Post

Leave a Reply