
發布
注冊
/
登錄單元編號的案例
Vusdfld\vumat等顯示動力學子程序獲取單元編號的一種方法
在編寫vusdfld\vumat等子程序的時候,有時需要知道單元編號,以便對單元直接賦值,不同于usdfld,umat子程序,他們的單元編號信息會傳入子程序中。但是顯示動力學對應的子程序傳入的是積分點編號,并沒有單元編號。可以有一種取巧的方法來實現積分點和單元編號的對應。具體思路如下:
以邊長為50mm立方體為例,網格種子密度為5,共1000個單元,單元類型C3R8R。而在顯示動力學中,使用單核運算時,abaqus會一次性傳入136個積分點,1000個單元會傳入8次,最后一次為48個積分點,可以通過write(*,*) ‘nblock’,nblock輸出來看傳入積分點的變化情況。因此可以在程序中設置一個全局變量,每8次循環后就歸0,重新循環。利用狀態變量statenew(k,1)來存儲單元。
在后處理中顯示單元編號,可以看出云圖從1到1000,正好對應所有單元的個數,利用查詢值功能,可以看到單元ID和狀態變量的值是相同的。
知道單元編號之后就可以對單元進行賦值操作,比如讀取一個隨機材料場文件,然后將數據賦值給單元。還可以利用該功能,實現類似“生死單元”的功能。一開始就根據單元編號抑制一部分,在之后的分析步在激活。比如第一個分析步殺死一些單元,然后下一個分析步在激活,比如刪除編號為501的單元。
可以看到編號501的狀態變量為值為0,單元應力為0,說明該單元被刪除,不參與運算過程。如果在場輸出中把STATUS勾選上,可以視覺上顯示出來單元刪除的效果。結果如下圖所示:
需要注意的是如果一個單元有多個積分點,則循環中需要跳過一部分積分點。該方法需要單核計算才能使用。
最后有子程序開發等相關需求,歡迎聯系我們。
展開 輸出abaqus inp如何去除instance信息,而且單元節點編號也不會有重復
解決的方法:在command line輸入 mdb.models['modelName'].setValues(noPartsInputFile=ON) 重新生成inp文件,這樣在寫出的inp文件里面就沒有instance信息,而且單元節點編號也不會有重復了。
利用APDL命令提取單元面積
將單元i的面積存入數組
k = k+1
*endif
*enddo
但是此方法存在一個問題,命令流將提取單元編號從EMIN到EMAX的所有單元面積,而不能保證單元編號對應的單元屬于當前選擇的單元集合。例如,本例中選擇單元1、2和12,執行上述命令流時,程序仍然會提取單元編號從1到12一共12個單元的面積。
方法二
針對方法一存在的不足,筆者進行了改進,整體思路如下:
1、采用單元個數作為循環控制變量;
1
*do, i, 1, ENUM
2、采用 elnext() 函數獲取下一個單元編號;
3、將單元編號和單元面積存入數組后,采用*vwrite命令將數組寫入文本文件;
本例寫出的單元編號和單元面積結果如下
特別說明:*vwrite命令不能在命令流窗口中運行,而必須在ANSYS Batch模式下運行。
小結
經筆者改進的方法二,可在ANSYS中一次性提取任意數量、編號不連續平面單元的面積,并將結果保存到文本文件,方便后續的繪圖或是統計工作。
展開 以C3D8R為例介紹如何在VUMAT中得到單元編號
VUMAT不像UMAT直接給出了單元的編號, VUMAT需要借助一個子程序vumatXtrArg 得到,這個方法最早發布在如下鏈接中
https://polymerfem.com/community/constitutive-models/nblock-in-vumat/
相信有不少朋友需要,摘錄如下
You are using C3D8R elements which means continuum 3D 8 noded reduced integration. A reduced integration of this kind has a single Gauss pt.
Thats why you have matching GP and element numbers.
展開 
【轉載】ABAQUS之inp文件結構解析
**
**節點集合和單元集合的表示方法:
**1.如果集合中的節點或單元編號是連續的,可以表示為
**節點集合: *Nset, Nset=節點集合名稱, Generate
** 起始節點編號,結束節點編號,節點編號增量
**單元集合: *Elset, Elset=單元集合名稱,Generate
** 起始單元編號,結束單元編號,單元編號增量
**注意:節點集合和單元集合的名稱不得超過80個字符,必須以字母或下劃線開始。
**2.如果集合中的節點或單元編號是不連續的,表示方法為:依次列出集合中的所有節點或單元(每個數據行接點或單元編號不得超過16個),格式:
**節點集合: *Nset, Nset=節點集合名稱
節點編號1,節點編號2,...節點編號16
**單元集合: Elset,Elset=單元集合名稱
單元編號1,單元編號2,...單元編號16
*Nset, nset=_PickedSet2, internal, generate
1, 281, 1
*Elset, elset=_PickedSet2, internal, generate
1, 80, 1
** Region: (Section-1,Picked)
*Elset, elset=_PickedSet2, internal, generate
1, 80, 1
**截面屬性的基本表示方法為:*Solid Section, Elset=單元集合名稱, Material=材料名稱
** 界面參數
**界面參數可以是二維模型的厚度或一維模型的截面面積等。
展開 Abaqus疑難雜癥——Inp文件的正確食用方法
*Preprint, echo=NO, model=NO, history=NO, contact=NO
使用關鍵詞可以設置在(.dat文件)中記錄的內容,本實例按照ABAQUS默認設置
*PART
如果部件對應的是非獨立實體(網格在部件上劃分),則PART數據塊中將包含節點、單元、集合和截面屬性等數據;如果部件對應的是獨立實體,則PART數據塊只包括*PART和*END PART兩行
*NODE
<節點編號>,<節點坐標1>,<節點坐標2>,<節點坐標3>
注:在inp文件中不同部件可以由相同的節點或單元編號。
*ELEMENT
*ELEMENT,TYPE=<單元類型>
<單元編號>,<節點1編號>,<節點2編號>,......
set集合表示
如果集合中的節點或者單元編號是連續的,則可以表示為:
節點集合:*NSET,NSET=<節點集合名稱>,GENERATE
<起始節點編號>,<結束節點編號>,<節點編號增量>
單元集合:*ELESET,ELSET=<單元集合名稱>,GENERATE
<起始單元編號>,<結束單元編號>,<單元編號增量>
如果集合中的節點或者單元編號是不連續的,則可以表示為(每個數據行中的節點或單元編號不得超過16個):
節點集合:*NSET,NSET=<節點集合名稱>
<節點編號1>,<節點編號2>,...<節點編號16>
...
展開 ABAQUS 單元類型和選型規則
網格單元的出現源于離散化求解,離散化把連續求解域離散為若干有限的子區域,分別求解各個子區域的物理變量,各個子區域相鄰連續與協調,從而達到整個變量場的協調與連續。每個子域內通過數學物理公式描述,單個這樣的子域就稱為單元。
有限元方法不僅應用于力場分析,還可以應用到溫度場、磁場、滲流場等分析領域,對于不同類型場的基本物理定律也是不一樣的,因此就需要用到不同的單元類型,如果需要考慮多場分析,就需要單元同時考慮所需場、以及場之間的耦合關系,也就出現了耦合單元;耦合分析雖然能獲得更準確的計算結果,但計算成本會增大,因此我們需要根據分析的問題來簡化問題,選擇合適的單元類型。
在選單元之前,我們先了解一下ABAQUS 單元編號法則,而了解單元編號法則就不得不提ABAQUS中單元具備的五個基本要素,分別是:
1)單元族群,如下圖所示為力學分析中常用的單元族群,這些族群的主要區別在于幾何特征的差異,適合于研究不同的結構類型,選擇合適的族群可以在不降低計算精度條件下,減少計算量,比如:一座高樓大廈如果全用實體單元建模,可能需要千萬甚至上億個實體單元,但如果將大廈的梁柱簡化為梁單元,墻和樓板簡化為殼單元模擬,單元數量將急劇減少。
單元編號法則1:它們的首字母或前幾位字符通常會作為單元編號的起始字符。比如:‘C3D8’中首
字母‘C’為Continuum elements 的首字母。
2)自由度,是分析過程中計算的基本變量,比如力學分析中的自由度是節點的平移和旋轉自由度;傳熱分析中需要考慮的自由度是節點溫度;滲流分析則是孔隙壓力自由度……
單元編號法則2:單元自由度通常由單元族群和尾部字符確定,比如尾部字符包含T,則表示包含溫度自由度,包含P,則表示包含孔壓自由度。
展開 inp書寫規則(以一個inp文件為例)
**
**節點集合和單元集合的表示方法:
**1.如果集合中的節點或單元編號是連續的,可以表示為
**節點集合: *Nset, Nset=節點集合名稱, Generate
** 起始節點編號,結束節點編號,節點編號增量
**單元集合: *Elset, Elset=單元集合名稱,Generate
** 起始單元編號,結束單元編號,單元編號增量
**注意:節點集合和單元集合的名稱不得超過80個字符,必須以字母或下劃線開始。
展開 基于tcl語言實現單元編號及節點編號的列表 ¥15
本案例是基于tcl語言實現每個單元的id號及對應單元的節點號,創建一個列表。具體實現過程見本案例的程序部分。
以下是輸出的格式:
1339780 {1394271 1394272 1394273 1394274}
詳情見收費的程序部分,凡購買本案例的朋友針對該案例有疑問,可私信,謝謝!
voronoi多晶體有限元模型的建立及應用 ¥25
(2)在ABAQUS/CAE中建立一個與MATLAB構建的三維Voronoi多晶體示意圖相同大小的Part模型,并劃上適量數目的網格單元,根據每一個單元編號的空間排布特點尤其是單元編號的排列規律,直接依次求得每一個單元體形心坐標。
(3)求得每一個單元體的形心坐標后,接下來就是依次求取每一個單元的形心坐標與每個晶核的距離,最終把每一個單元歸屬于其形心坐標距離最近晶核所處的晶粒中。
(4)把上述所得的每一個晶粒的編號和該晶粒包含的全部單元編號,最后用多級列表的方式存放于txt文本里,為后面修改INP文件做好準備工作。
經過上面MATLAB部分的編程,僅僅只是得到了關于三維Voronoi圖的全部拓撲結構信息。為此必須得在ABAQUS生成的INP文件里的part部分編寫與晶粒數相同多的set集合,每一個set集合就作為一個晶粒。接著,在txt文本里找到該晶粒包含的所有單元編號寫入與之對應的set集合中完成整個建模。在INP文件里實現三維建模的具體步驟如下:
(1)于ABAQUS/CAE模塊中創建單個3D/Deformable/Shell實體,選擇默認裝配,劃分網格類型為C3D8R的網格單元,接著在Job模塊中點擊Write Input命令生成相應的INP文件。
(2)把之前所得的每一個晶粒的編號和該晶粒包含的全部單元編號作為一個set集合,最終把每一個set集合以多級列表的方式寫入已建立好的INP文件里對應的part部分。在ABAQUS里重新打開修改之后的模型(INP文件格式類型),并且在Color Code Dialog中選擇Color code by:Sets。
展開 voronoi多晶體有限元模型的建立 ¥22
(2)在ABAQUS/CAE中建立一個與MATLAB構建的三維Voronoi多晶體示意圖相同大小的Part模型,并劃上適量數目的網格單元,根據每一個單元編號的空間排布特點尤其是單元編號的排列規律,直接依次求得每一個單元體形心坐標。
(3)求得每一個單元體的形心坐標后,接下來就是依次求取每一個單元的形心坐標與每個晶核的距離,最終把每一個單元歸屬于其形心坐標距離最近晶核所處的晶粒中。
(4)把上述所得的每一個晶粒的編號和該晶粒包含的全部單元編號,最后用多級列表的方式存放于txt文本里,為后面修改INP文件做好準備工作。
經過上面MATLAB部分的編程,僅僅只是得到了關于三維Voronoi圖的全部拓撲結構信息。為此必須得在ABAQUS生成的INP文件里的part部分編寫與晶粒數相同多的set集合,每一個set集合就作為一個晶粒。接著,在txt文本里找到該晶粒包含的所有單元編號寫入與之對應的set集合中完成整個建模。在INP文件里實現三維建模的具體步驟如下:
(1)于ABAQUS/CAE模塊中創建單個3D/Deformable/Shell實體,選擇默認裝配,劃分網格類型為C3D8R的網格單元,接著在Job模塊中點擊Write Input命令生成相應的INP文件。
(2)把之前所得的每一個晶粒的編號和該晶粒包含的全部單元編號作為一個set集合,最終把每一個set集合以多級列表的方式寫入已建立好的INP文件里對應的part部分。在ABAQUS里重新打開修改之后的模型(INP文件格式類型),并且在Color Code Dialog中選擇Color code by:Sets。
展開 
空氣彈簧單元生成方法
彈簧單元生成
從inp文件中,將*Element, type=S4R下面的單元與節點復制到excel表格中。每行有5個數字,第一個數字代表單元編號,后面四個代表這個單元所包含的節點編號。我們要做的就是把單元編號改掉,而節點編號不變。這樣,改動過的新單元與舊單元就擁有了共同的節點。新單元type=F3D4,這樣我們就有了與S4R共節點的但是單元編號不一樣的F3D4空氣彈簧單元。我這里將S4R單元統一移動了100個編號,變成F3D4單元。注意,這兩種單元的編號一定不能重復。如圖2所示。
圖2
將F3D4單元編號和節點復制到INP文件中,并在開頭寫上關鍵字
*Element, type=F3D4
還要增加一個空氣彈簧單元集合,
*Elset, elset=SET-AIRSKIN, generate
101, 152, 1
2. 預定義場(壓力、溫度)
打開cae,重新讀入上面改動過的inp模型。
添加一個與節點不重合的參考點集合:Set-AirRP(0,1,0)
在model-edit keywords里面編輯predified field。加入
** PREDEFINED FIELDS
**
** Name: Predefined Field-InitialTemperature Type: Temperature
*Initial Conditions, type=TEMPERATURE
Part-2-1.Set-AirRP, 300.
*Initial Conditions, TYPE=PORE PRESSURE
Part-2-1.Set-AirRP, 414., 0, 414. , 500
預定義初始溫度為300k,初始內壓為414Pa。
注意,這里要檢查一下shell的方向。
展開 空氣彈簧單元生成方法
彈簧單元生成
從inp文件中,將*Element, type=S4R下面的單元與節點復制到excel表格中。每行有5個數字,第一個數字代表單元編號,后面四個代表這個單元所包含的節點編號。我們要做的就是把單元編號改掉,而節點編號不變。這樣,改動過的新單元與舊單元就擁有了共同的節點。新單元type=F3D4,這樣我們就有了與S4R共節點的但是單元編號不一樣的F3D4空氣彈簧單元。我這里將S4R單元統一移動了100個編號,變成F3D4單元。注意,這兩種單元的編號一定不能重復。如圖2所示。
圖2
將F3D4單元編號和節點復制到INP文件中,并在開頭寫上關鍵字
*Element, type=F3D4
還要增加一個空氣彈簧單元集合,
*Elset, elset=SET-AIRSKIN, generate
101, 152, 1
2. 預定義場(壓力、溫度)
打開cae,重新讀入上面改動過的inp模型。
添加一個與節點不重合的參考點集合:Set-AirRP(0,1,0)
在model-edit keywords里面編輯predified field。加入
** PREDEFINED FIELDS
**
** Name: Predefined Field-InitialTemperature Type: Temperature
*Initial Conditions, type=TEMPERATURE
Part-2-1.Set-AirRP, 300.
*Initial Conditions, TYPE=PORE PRESSURE
Part-2-1.Set-AirRP, 414., 0, 414. , 500
預定義初始溫度為300k,初始內壓為414Pa。
注意,這里要檢查一下shell的方向。
展開 Abaqus無限單元的建立方法
什么是無限單元
無限單元是有限元的一種單元,它的單元形式如下圖所示。
2. 無限單元的作用
使用無限單元作為反射邊界,應力波將無反射,防止在邊界上產生的應力波反射重新進入模型,從而確保結果的正確性。
3. 怎么建立無限單元
(1)先建立有限元模型,然后將需要設置為無限單元的部分分割,在mesh模塊中設置該部分單元類型,這樣在inp文件中需要設置為無限單元的部分就會集中在一起,方便修改其節點的編號。
(2)在inp文件里對無限單元進行單元屬性及編號的改變,需要注意無限單元的方向,在二維無限單元中,前兩個節點所組成直線中點A與后兩個節點所組成直線中點B,無限單元的方向就是A指向B的方向,如圖1,二維無限元的方向是朝下;在三維無限單元中,前四個節點所組成平面的中心點C與后四個節點所組成平面的中心點D,無限單元的方向就是C指向D的方向,如圖1,三維無限單元的方向朝右。
(3)將修改后的inp導入,建立job提交就可以了。
實例講解-鋼丸撞擊金屬板
機械噴丸的模擬,其中設置金屬板邊界部分為無限單元。
(1)建立有限元模型,將金屬板的邊界partition切割,全部設置為C3D8R單元類型,修改邊界部分為C3D8I(邊界部分的單元類型和其他部分不一樣,方便下步統一更改為無限單元),如圖,建立job-write input 生成inp文件。
(2)修改inp文件的單元屬性及編號
inp文件以記事本的方式打開,將Element, type(單元類型)C3D8I修改為CIN3D8(無限單元),
下一步修改無限單元節點編號的排列順序,在inp的data lines中第一列是單元編號,后面的是節點編號,如圖7。在本文中,無限單元的方向是從金屬板的中心向外。
展開 基于Abaqus的生死單元技術的焊接仿真分析 ¥11.99
Mesh模塊
焊錫部分單元控制:Hex-dominated,Sweep,Medial axis
兩邊彎板單元控制:Hex-dominated,Sweep,Advancing front
設置全局單元尺寸為0.001m,按圖中順序依次劃分網格,選擇單元類型為Heat Transfer(DC3D8)
4. Step模塊
采用Python腳本(參考附錄:第一部分(循環生成分析步))實現分析步自動循環創建。
5. Interaction模塊
在“Step-2”設置表面對流換熱條件和熱輻射條件
6. Load模塊
定義體熱源和預定義溫度場
7. 編輯模型屬性(Model-->Edit Attributes)
設置絕對零度(-273.15)和波爾茨曼常數(5.67E-8)。
8. 生死單元實現
(1)查看焊錫部分兩端的單元編號,以及單元編號的分布規律。本例中焊錫部分每層有8個單元,兩端的單元編號分別為1~8和793~800。
(2)采用Python腳本(參考附錄:第二部分(循環編輯關鍵字Model change))實現關鍵字Model change的自動添加。
9. Job模塊
建立Job,在General選項卡添加User subroutine file(Fortran文件),并提交。
展開