
發布
注冊
/
登錄tcl命令
關注創建者:匿名 創建時間:2021-12-15
tcl命令的視頻教程
STKO for OpenSEES
OpenSees是一款強大的開源非線性有限元軟件,但由于基于tcl命令建模分析在一定程度上限制了,目前也有多位學者為OpenSees定制前后處理軟件,作者基于自己的用戶體驗,發現STKO在銜接方面做的最為突出,可以讓初學者很快上手進行科研和工程分析,本系列視頻就是介紹STKO的操作教程
免費 41分鐘 1009播放
查看
tcl命令的實例教程
這里利用tcl寫了一個宏命令用來快速化構建實體螺栓的pretension surface。但首先需要保證每個實體螺栓網格至少有一個水平面。如下圖所示,模型中有8個螺栓。
那么需要構建8個pretension surface,在hypermesh中利用tcl創建宏命令來進行構建。在這里需要首先在hypermesh構建group,如下圖所示。
然后選擇宏命令,程序自動進行判定并選定每個螺栓pretension surface,然后放入對應的group中。最后創建的pretension surface如下圖所示:
這里程序僅適用于螺栓的中心軸沿著Z方向,與xy平面垂直的情況,每種螺栓的尺寸可以不一樣。附件是操作的視頻。
kk 2018-02-28 16-02-15.mp4
展開 lreplace命令是tcl語言中的一個列表操作命令,它用于替換列表中一個或多個元素。
語法: lreplace list first last ?element element ...?
參數介紹: list:要操作的列表。 first:第一個要替換的元素的索引,從0開始。 last:最后一個要替換的元素的索引,如果只想替換一個元素,則可將該參數設為同first一樣的值。 element:要替換的元素。
示例:
set my_list {a b c d e f g}
set new_list [lreplace $my_list 2 4 x y z]
puts $new_list
輸出: a b x y z f g
示例解釋: 在上面的示例中,我們首先定義了一個包含7個元素的列表my_list,然后使用lreplace命令將my_list列表中的第3個到第5個元素(即c、d和e)替換為x、y和z。最后,我們將新的列表存儲在new_list變量中,并使用puts命令將其輸出。
輸出結果為a b x y z f g。
lreplace:替換 / 刪除 指定 索引位置 / 索引范圍 的元素。
展開 另外兩種方法一個是通過使用tcl腳本來處理結果文件,并將需要讀取的設計響應結果輸出到一個文本文件中。還有一種方法是使用hyperview/hypergraph的mvw文件來處理結果文件,這種方法相比于第二種方法更加容易掌握,不需要熟悉tcl腳本語言。本文主要針對后兩種方法進行講解。(注:這兩種方法均需要使用hyperworks的batch命令)
Hyperworks批處理命令格式:
<altair_home>/hw/bin/<platform>/hw.exe-clientconfig hwfepre.dat -tcl my_script.tcl
方法一:通過tcl腳本進行結果后處理
命令格式:
D:\Altair\14.0\hw\bin\win64\hw.exe-b -clientconfig hwpost.dat -tcl my_script.tcl
其中:
-b 為后臺運行hyperworks軟件命令
-clientconfig后面跟模塊屬性文件其中hwpost.dat為hyperview屬性文件
-tcl 后面跟要運行的tcl腳本文件
實例:通過tcl命令讀取一個擺臂應力結果,并將最大應力結果寫到一個結果文件中,用于后續優化軟件聯合。
擺臂最大應力值為370.1MPa.
部分tcl命令:
通過運行tcl命令生成一個包含最大應力結果的文本文件。
該結果文件便可直接用于優化軟件設計響應的設置。
這種方法需要讀者熟悉tcl語言,而且對于不同的項目而言,往往需要修改tcl命令來適用于不同的項目和模型文件,因此這種方法具有一定的門檻和局限性。作者推薦后面的方法二。
展開 eval命令
接收一個或多個參數,然后把所有的參數以空格隔開組合到一起成為一個腳本,然后對這個腳本進行求值。
proc test1 {var} \
{
if {$var == 1} {
puts "var is one"
} else {
puts "var is not one"
}
}
以上也等效于:
proc test1 {var} {
if {$var == 1} {
puts "var is one"
} else {
puts "var is not one"
}
}
運行完以上程序后再運行以下代碼:
eval test1 1
或等效于:
test1 1
(Documents) 465 % eval [set foo "puts hi"]
hi
展開 Syntax
*createstringarray size strings
Type
HyperMesh Tcl Modify
Description
Creates an array of strings for use in a subsequent command.
Inputs
size
The size of the array.
strings
The strings to put in the array.
Examples
To create a string array with the strings "abc" and "def":
*createstringarray 2 "abc" "def"
自學語句1:
*createstringarray 2 "elements_on" "geometry_off"
創建2個字符串數組,"elements_on" "geometry_off" 以便在后續命令中使用
See Also
*createarray
*createdoublearray
*createdoublearray2d
*createentityarray2d
*createintarray2d
堅持每天學習,時間會證明一切,加油
展開 
tcl命令的相關專題、標簽、搜索
tcl命令的最新內容
\hw\bin\win64\hw.exe" -b -clientconfig hwpost.dat -tcl FEMPost.tcl
該tcl文件需要完全自己手寫,例如(截圖):
hwi OpenStack
hwi GetSessionHandle sess
sess CaptureScreen JPEG {myfigure.jpg} 100
hwi CloseStack
tcl
lreplace命令是tcl語言中的一個列表操作命令,它用于替換列表中一個或多個元素。
語法: lreplace list first last ?element element ...?
參數介紹: list:要操作的列表。 first:第一個要替換的元素的索引,從0開始。 last:最后一個要替換的元素的索引,如果只想替換一個元素,則可將該參數設為同first一樣的值。
tcl腳本-lindex函數
語法:lindex list indiex
例:
set a {1 2 3 4 5}
lindex a 2
3 //返回第三個元素
或者:lindex list {}
這種情況下返回 lindex列表本身。
當只有一個單獨的元素時,lindex命令返回list列表中的第index
名稱
lsort - 給列表中的元素排序
語法
lsort ?options? list
描述
這個命令對list中的元素進行排序,返回一個重新排序的列表。lsort命令的執行使用歸并排序算法,所以排序性能穩定在(n log n)的級別。
默認使用ASCII表排序,但是以下的options選項也可以控制排序的方式:
-ascii
使用 ASCII表的字符順序排序
圖2 算例問題域
3.1 TCL
利用后處理軟件Hyperview將綠色區域邊界節點位移導出為.csv文件,對每一個節點位移添加如下關鍵字實現tcl命令驅動:*loadcreateoneentity_curve,該命令使用tcl變量在節點上為負載組件創建負載。
獲取節點坐標
hm_nodevalue $i coordates
執行如下代碼:
hm_nodevalue 1 coordates
(Documents) 176 % hm_nodevalue 145 coordates
{210000 10004 0.3}
# ###############選中第一個節點id############
*createmark nodes 2
hm_entitylist nodes id
# 輸出所有節點的id
hm_entitylist
Returns a list of names or IDs of all entities of the requested type.
Syntax
hm_entitylist entity_type name_or_id ?mode?
Type
for循環是一個循環控制結構,可以有效地編寫需要執行特定的代碼次數。
for { set a 10} {$a < 20} {incr a} {
puts "value of a: $a"
}
eval命令
接收一個或多個參數,然后把所有的參數以空格隔開組合到一起成為一個腳本,然后對這個腳本進行求值。
proc test1 {var} \
{
if {$var == 1} {
puts "var is one"
} else {
puts "var is not one"
}
}
以上也等效于:
proc test1 {var} {
if {$var
循環控制指令break
語法格式:break
功能:結束整個循環過程,并從循環中跳出
foreach i $list1 {
if { $i==3 } {
break}
puts $i}