
發布
注冊
/
登錄NodeSet的案例
PhiPsi-高性能有限元程序
# -*-coding:UTF-8-*-
from odbAccess import *
from math import sqrt
# 打開ODB文件
odbName = session.viewports[session.currentViewportName].odbDisplay.name
odb = session.odbs[odbName]
assembly = odb.rootAssembly
# 打印所有節點集的名稱
print("All node sets in the model:")
for nodeSetName in assembly.nodeSets.keys():
print(nodeSetName)
# 選擇步驟和增量
stepName = 'Step-1' # 替換為你的實際步驟名稱
lastFrame = odb.steps[stepName].frames[-1]
# 初始化最大位移合量變量
maxDisplacementMagnitude = 0
# 遍歷所有節點
# 我將頂面節點設置為set-up
for node in assembly.nodeSets['SET-UP'].nodes[0]:
# 獲取節點的位移輸出(這里假設輸出變量為U,即位移)
displacement = lastFrame.fieldOutputs['U'].getSubset(region=node).values[0]
# 計算位移合量
displacementMagnitude = sqrt(displacement.data[0]**2 + displacement.data[1]**2 + displacement.data[2]**2)
展開 LS-DYNA鈦合金切削仿真
0.000 0.000 0
*DATABASE_GLSTAT
1.0000E-7 0 0 1
*DATABASE_MATSUM
1.0000E-7 0 0 1
*DATABASE_RBDOUT
1.0000E-7 0 0 1
*DATABASE_RCFORC
1.0000E-7 0 0 1
*DATABASE_TPRINT
1.0000E-7 0 0 1
*DATABASE_BINARY_D3PLOT
$# dt lcdt beam npltc psetid
1.0000E-7 0 0 0 0
*DATABASE_BINARY_D3THDT
$# dt lcdt beam npltc psetid
1.0000E-7 0 0 0 0
*DATABASE_EXTENT_BINARY
$# neiph neips maxint strflg sigflg epsflg rltflg engflg
0 0 3 1 1 1 1 1
$# cmpflg ieverp beamip dcomp shge stssz n3thdt ialemat
0 0 0 1 1 1 2 1
$# nintsld pkp_sen sclp unused msscl therm intout nodout
0 0 1.000000 0 0
*BOUNDARY_PRESCRIBED_MOTION_RIGID
$# pid dof vad lcid sf vid death birth
2 1 0 1 1.000000 01.0000E+28 0.000
*BOUNDARY_SPC_SET
$# nsid cid dofx dofy dofz dofrx dofry dofrz
1 0 1 1 1 1 1 1
*SET_NODE_LIST_TITLE
NODESET
展開 深刻理解inp文件
標簽的開始和結束不能用雙重“_”
下面是一個使用了引號和沒有使用引號的例子:
*ELEMENT, TYPE=SPRINGA, ELSET="One element"
1,1,2
*SPRING, ELSET="One element"
1.0E-5,
*NSET, ELSET="One element", NSET=NODESET
*BOUNDARY
nodeset,1,2
4.數據行重復:
數據行可以重復,也就是說每行數據可以有一行響應的變量也可以有幾行。同樣也可以有多行數據行,對應各自的變量行.如:
*ELASTIC, TYPE=ISOTROPIC
200.E3, 0.3, 20.
150.E3, 0.35, 400.
80.E3, 0.42, 700.
定義了一個零件的材料性質,均質,線彈性,在不同應力下的揚式模量和泊松比.
三、從外存儲器中引入模型或者歷史數據
The *INCLUDE option can be used to specify an external file that contains a portion of the ABAQUS input file. This file can include model and history definition data, comment lines, and other *INCLUDE references. When the option is encountered, ABAQUS will immediately process the input data within the file specified by the INPUT parameter.
展開 Python 提取odb結果
### python腳本提取解釋
# 導入模塊
from odbAccess import *
from abaqusConstants import *
from odbMaterial import *
from odbSection import *
import math
# 打開odb文件
odb = openOdb(path=r'G:\CABLE_CON\TEXT2\Job-1.odb')
Step_1=odb.steps['Step-1']
# 鎖定目標繩索
region = Step_1.historyRegions['Element ASSEMBLY.1']
xy1=region.historyOutputs['CTF1'].data[300]
# 取最后一幀數據,并將括號刪掉
s=str(xy1)
s = s.replace("(", "")
s = s.replace(")", "")
# 將繩力輸出到 F1.txt 文件
disFile=open('F1.txt','w')
disFile.write(s)
disFile.close()
# 取最后一幀數據
lastFrame=Step_1.frames[-1]
Zuobiao=lastFrame.fieldOutputs['COORD']
Regioncare=odb.rootAssembly.nodeSets['RP']
Coor1=Zuobiao.getSubset(region=Regioncare)
Zuobiao_x=Coor1.values[0].data[0]
Zuobiao_y=Coor1.values[0].data[1]
Zuobiao_z=Coor1.values[0].data[2]
Zhuanjiao=lastFrame.fieldOutputs
展開 
技術小貼士-柔性體專用力元素中LoadEx和Pressure的區別是什么?
LoadEx - Uniform 類型
在向指定的NodeSet施加相同方向的力時使用。力被施加到節點上。
如果將100N應用到20個節點上,則總計20000N的力被施加。
2. LoadEx - Relative 類型
向指定的節點施加力,力的方向由連接基準節點和目標節點的方向向量確定。
用于基于特定節點應用不同方向均勻大小的力。
3. Pressure
當您想在指定的面上指定一個值為“壓力”時使用。
由于壓力,按指定的Patch大小施加的力的大小可能會有所不同。
例如,如果在mm,N單位系中,將100 N/mm^2的Pressure應用于總面積為100 mm^2的Patch Set,則總計10000N的力。
展開 批量提取Abaqus的節點坐標(初始坐標、指定Step下的變形量、變形后節點坐標) ¥40
</p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><pre class="ql-syntax" spellcheck="false">from odbAccess import *
odb_path = r"E:\Abaqus work directory\rubber1.odb"
my_odb = openOdb(path=odb_path)
for node_set_name in my_odb.rootAssembly.nodeSets.keys():
node_set = my_odb.rootAssembly.nodeSets[node_set_name]
print("Node Set: {}".format(node_set_name))
</pre><div contenteditable="false" width="100%">
<figure class="figure-image" data-img="https://img.jishulink.com/202405/attachment/b3f22aacab034851a385b77d4a98c4ea.jpg" style="text-align: center;">
<img src="https://img.jishulink.com/202405/attachment/b3f22aacab034851a385b77d4a98c4ea.jpg" style="max-width: 100%;" data-mobile-src="https://img.jishulink.com/202405/attachment/b3f22aacab034851a385b77d4a98c4ea.jpg
展開 利用Python提取ABAQUS的計算結果(ODB)信息
圖4 查看模型在x方向的寬度
03
用python將位移導入excel
odb=openOdb(path=odbname)
wbkName='NodalDisplacement'
wbk1=xlwt.Workbook()
sheet=wbk1.add_sheet('Sheet1')
RefPointSet=odb.rootAssembly.nodeSets['U-XYZ']
frameRepository=odb.steps['Step-1'].frames
for i in range(3):
sheet.write(0,i,('U'+str(i+1)+'(U-XYZ)'))
第1行表示打開odb計算結果文件。
第2行表示生成的excel文件名為NodalDisplacement。
第3行和第4行表示添加Sheet1工作表。
第5行建立節點SetU-XYZ,方便后續對該Set進行位移提取。
第6行表示Step-1里的幀(frames)對象。
第7行和第8行通過循環在excel第1行第i列(也就是代碼中的0,i),寫入U1(U-XYZ),U2(U-XYZ),U3(U-XYZ),如圖5所示,其中Python編程用+可以實現字符連綴,str(i)可以將數字變量i改為字符i。
展開 Abaqus利用region讀取結果數據
示例一創建一個變量center,將一個叫做PUNCH的節點set賦值給這個變量,通過整個模型的位移場displacement得到該節點set的輸出數據,代碼如下:
center = odb.rootAssembly.instances['PART-1-1'].nodeSets['PUNCH']
centerDisplacement = displacement.getSubset(region=center)
centerValues = centerDisplacement.values
for v in centerValues:
print v.nodeLabel, v.data
其中的displacement是已經創建好的位移場數據,centerDisplacement變量得到該節點集的所有數據,centerValues變量得到該節點集的數值數據,通過循環輸出節點號和當前數據。
展開 Abaqus利用region讀取結果數據
示例一創建一個變量center,將一個叫做PUNCH的節點set賦值給這個變量,通過整個模型的位移場displacement得到該節點set的輸出數據,代碼如下:
center = odb.rootAssembly.instances['PART-1-1'].nodeSets['PUNCH']
centerDisplacement = displacement.getSubset(region=center)
centerValues = centerDisplacement.values
for v in centerValues:
print v.nodeLabel, v.data
其中的displacement是已經創建好的位移場數據,centerDisplacement變量得到該節點集的所有數據,centerValues變量得到該節點集的數值數據,通過循環輸出節點號和當前數據。
展開 MATLAB啟動ABAQUS——優化
time costed %d:%d:%d\n',h,m,sec);
xx=1;
else
fprintf('\n runabaqus error:InpFile submmit failed\n');
xx=0;
end
end
更新迭代采集步數的程序代碼
from odbAccess import *
from abaqusConstants import *
from odbMaterial import *
from odbSection import *
import math
將當前步數寫到cycle.txt 文件下
f=open('cycle.txt','r')
n=f.read()
f.close()
讀取odb文件
odb = openOdb(path=r'G:\CABLE_CON\TEXT2\Job-' + n + '.odb')
取odb文件中最后一個分析步進行數據提取
Step_1=odb.steps['Step-'+n]
region = Step_1.historyRegions['Element ASSEMBLY.1']
xy1=region.historyOutputs['CTF1'].data[300]
s=str(xy1)
s = s.replace("(", "")
s = s.replace(")", "")
disFile=open('F1.txt','w')
disFile.write(s)
disFile.close()
lastFrame=Step_1.frames[-1]
Zuobiao=lastFrame.fieldOutputs['COORD']
Regioncare=odb.rootAssembly.nodeSets
展開 MATLAB啟動ABAQUS——優化
time costed %d:%d:%d\n',h,m,sec);
xx=1;
else
fprintf('\n runabaqus error:InpFile submmit failed\n');
xx=0;
end
end
更新迭代采集步數的程序代碼
from odbAccess import *
from abaqusConstants import *
from odbMaterial import *
from odbSection import *
import math
將當前步數寫到cycle.txt 文件下
f=open('cycle.txt','r')
n=f.read()
f.close()
讀取odb文件
odb = openOdb(path=r'G:\CABLE_CON\TEXT2\Job-' + n + '.odb')
取odb文件中最后一個分析步進行數據提取
Step_1=odb.steps['Step-'+n]
region = Step_1.historyRegions['Element ASSEMBLY.1']
xy1=region.historyOutputs['CTF1'].data[300]
s=str(xy1)
s = s.replace("(", "")
s = s.replace(")", "")
disFile=open('F1.txt','w')
disFile.write(s)
disFile.close()
lastFrame=Step_1.frames[-1]
Zuobiao=lastFrame.fieldOutputs['COORD']
Regioncare=odb.rootAssembly.nodeSets
展開 
Abaqus后處理二次開發顯示運動軌跡 ¥99.9
nodeSet = instance.NodeSetFromNodeLabels(name=nodeSetName, nodeLabels=(nodeLabel,))
...
#定義背景色彩等
session.graphicsOptions.setValues(backgroundStyle=SOLID, backgroundColor='#FFFFFF')
session.printOptions.setValues(vpDecorations=OFF, vpBackground=ON)
#顯示軌跡、定義軌跡線型等
...
Abaqus案例應用
A. 在這個模型中,小球以一定的初速度扔進漏斗,彈跳幾下之后沿著漏斗曲面來回滾動,最終落入漏斗,圖中顯示的是球心的運動軌跡。
小球落入漏斗
B. 該模型為示意模型,演示了行星公轉時衛星繞行星的運動,圖中顯示的是衛星的運動軌跡。
衛星運動
C. 這個模型是一個三級球面擺,外圈以恒定的速度轉動,內圈在重力作用下做非規則運動,圖中顯示的是最內圈的擺端部中心點的運動軌跡。
三級球面擺
D. 最后這一個模型是之前的文章-奇妙的單擺中介紹過的,這里不再贅述,我們用此模型作為tracing.py的教學演示。
沖浪者單擺
本文章付費部分目錄
1. tracing.py使用方法詳細教學
2. tracing.py與沖浪者inp文件surfer.inp的Baidu網盤下載鏈接
展開 基于HyperWorks/LsDyna的保險杠40%偏置碰撞仿真解析
通過卡片的設置已經創建好了接觸的類型即SingleSurface,所以我們只需在add界面中添加Slave的組件即整車的部件(除去焊接的1D單元),點擊update就完成了保險杠自身的接觸變型.
2.3 車身剛體與保險杠的連接(在卡片CONSTRAINED_EXTRA_NODES_SET中進行設置)
在設置連接之前首先對連接保險杠的車身剛體進行模擬和定義,通過Card Edit/comps面板對vehicle mass部件進行設置,具體操作如圖所示:
在該界面中需要設置它的質心坐標、質量、轉動慣量和仿真時的速度(在整車碰撞中不需要這樣定義,這樣設置的一些參數是為了模擬整車的作用效果才這樣定義的
在CONSTRAINED_EXTRA_NODES_SET的創建中首先要設置它的剛體部件即在PID中選擇,然后再對接觸進行設置,具體操作如圖所示:
圖中藍色的部件為剛體,紅色的NodeSet為車身剛體與保險杠連接點即在slave/sets中進行定義
2.4 左右前縱梁之間通過剛性連接,前縱梁與防撞橫梁之間也是通過剛性連接(主要是為了使模型更加簡單方便計算)
除了以上設置的接觸和連接之外,在碰撞仿真中通常還用以下接觸:
a、CONTACT_AUTOMATIC_SURFACE_TO_SURFACE用于兩個獨立組件之間的接觸,比如說側碰中,試驗臺車撞試驗車,兩個車之間的接觸就可以這樣設置
b、CONTACT_SPOTWELD用于整車焊接的部件與焊點單元的接觸
3、添加載荷和約束
3.1 碰撞速度的設置,通過卡片INITIAL_VELOCITY可以完成。
展開 基于HyperWokes/LsDyna的保險杠40%偏置碰撞仿真解析
通過卡片的設置已經創建好了接觸的類型即SingleSurface,所以我們只需在add界面中添加Slave的組件即整車的部件(除去焊接的1D單元),點擊update就完成了保險杠自身的接觸變型
2.3 車身剛體與保險杠的連接(在卡片CONSTRAINED_EXTRA_NODES_SET中進行設置)
在設置連接之前首先對連接保險杠的車身剛體進行模擬和定義,通過Card Edit/comps面板對vehicle mass部件進行設置,具體操作如圖所示:
在該界面中需要設置它的質心坐標、質量、轉動慣量和仿真時的速度(在整車碰撞中不需要這樣定義,這樣設置的一些參數是為了模擬整車的作用效果才這樣定義的
在CONSTRAINED_EXTRA_NODES_SET的創建中首先要設置它的剛體部件即在PID中選擇,然后再對接觸進行設置,具體操作如圖所示:
圖中藍色的部件為剛體,紅色的NodeSet為車身剛體與保險杠連接點即在slave/sets中進行定義
2.4 左右前縱梁之間通過剛性連接,前縱梁與防撞橫梁之間也是通過剛性連接(主要是為了使模型更加簡單方便計算)
除了以上設置的接觸和連接之外,在碰撞仿真中通常還用以下接觸:
a、CONTACT_AUTOMATIC_SURFACE_TO_SURFACE用于兩個獨立組件之間的接觸,比如說側碰中,試驗臺車撞試驗車,兩個車之間的接觸就可以這樣設置
b、CONTACT_SPOTWELD用于整車焊接的部件與焊點單元的接觸
3、添加載荷和約束
3.1 碰撞速度的設置,通過卡片INITIAL_VELOCITY可以完成。
展開 ABAQUS常見問題解答(一)
***ERROR: NODE SET ASSEMBLY_CENTER HAS NOTBEEN DEFINED
答:“NODESET ASSEMBLY_CENTER HAS NOT BEEN DEFINED”:模型中用到了名為center 的集合,但沒有定義它。
6.用批處理方式:abaqus job=aus interactive,運行abaqus 時如何設置內存大小?
答: 如果你是想提高abaqus 可以運用的內存的量,你可以修改environment 文件中的memory 設置。不過如果你沒有這個權限的話,你也可以把這個文件拷貝下來到你的運行目錄里面,再修改,abaqus 默認運行目錄里面的設置優先。
歡迎關注微信公眾號:SimC結構工作室
展開