ANSYS模型导入ABAQUS.docx
《ANSYS模型导入ABAQUS.docx》由会员分享,可在线阅读,更多相关《ANSYS模型导入ABAQUS.docx(19页珍藏版)》请在冰豆网上搜索。
ANSYS模型导入ABAQUS
ANSYS模型导入ABAQUS
SYS软件的参数化建模(APDL)极其方便,而ABAQUS卓越的非线性计算功能使其成为有限元软件中的贵族,如果能整合两者的优势,有限元模拟计算就会相当高效。
下面就将ANSYS模型如何导入ABAQUS简单交流一下。
(其中部分内容参考了SIMWE上的精华贴)
首先在ANSYS编写APDL语言输出模型的节点和单元数据文件。
如果直接用ANSYS中的WRITENODEFILE和WRITEELEMFILE得到的节点和单元数据文件,数据之间只有空格,没有逗号,不符合ABAQUS的INPUT文件格式要求。
输出节点信息的APDL如下:
Allsel,all !
选中所有
!
输出节点
*GET,NNode,NODE,,COUNT,,,, !
得到当前模型中的总节点数
*CFOPEN,ansystoabaqus,inp
*DO,I,0,NNode
*VWRITE,Chrval(i),',',NX(I),',',NY(I),',',NZ(I)
(A8,A1,F10.5,A1,F10.5,A1,F10.5)
*ENDDO
Allsel,all
输出单元信息时要弄清楚单元类型,编写APDL对每种类型的每个单元输出单元编号,各节点的编号。
常见的SOLID65和SOLID45、SOLID95单元的APDL输出命令如下:
*GET,NumberofNode,NODE,,COUNT,,,,
ESEL,S,ENAME,,65
*GET,NElem,ELEM,,COUNT,,,, !
得到当前模型中的总单元数
!
对单元集进行循环
*GET,nd,ELEM,,NUM,MIN,,,,
*DO,I,1,NElem
!
得到当前单元的类型
*GET,ENAME,ELEM,nd,ATTR,ENAM
!
如果是65号(65号单元)
*IF,ENAME,EQ,65,THEN
!
得到该单元的节点编号
*GET,EN1,ELEM,nd,NODE,1
*GET,EN2,ELEM,nd,NODE,2
*GET,EN3,ELEM,nd,NODE,3
*GET,EN4,ELEM,nd,NODE,4
*GET,EN5,ELEM,nd,NODE,5
*GET,EN6,ELEM,nd,NODE,6
*GET,EN7,ELEM,nd,NODE,7
*GET,EN8,ELEM,nd,NODE,8
*VWRITE,Chrval(nd),',',Chrval(EN1),',',Chrval(EN2),',',Chrval(EN3),',',Chrval(EN4),',',Chrval(EN5),',',Chrval(EN6),',',Chrval(EN7),',',Chrval(EN8)
(A8,8(A1,A8))
nd=ELnext(nd)
*ENDIF
*ENDDO
Allsel,all
*GET,NumberofNode,NODE,,COUNT,,,,
ESEL,S,ENAME,,45 !
solid45单元8节点六面体
*GET,NElem,ELEM,,COUNT,,,, !
得到当前模型中的总单元数
!
对单元集进行循环
*GET,nd,ELEM,,NUM,MIN,,,,
*DO,I,1,NElem
*GET,ENAME,ELEM,nd,ATTR,ENAM !
得到当前单元的类型
*IF,ENAME,EQ,45,THEN !
如果是45号(45号单元)
!
得到该单元的节点编号
*GET,EN1,ELEM,nd,NODE,1
*GET,EN2,ELEM,nd,NODE,2
*GET,EN3,ELEM,nd,NODE,3
*GET,EN4,ELEM,nd,NODE,4
*GET,EN5,ELEM,nd,NODE,5
*GET,EN6,ELEM,nd,NODE,6
*GET,EN7,ELEM,nd,NODE,7
*GET,EN8,ELEM,nd,NODE,8
*VWRITE,Chrval(nd),',',Chrval(EN1),',',Chrval(EN2),',',Chrval(EN3),',',Chrval(EN4),',',Chrval(EN5),',',Chrval(EN6),',',Chrval(EN7),',',Chrval(EN8)
(A8,8(A1,A8))
nd=ELnext(nd)
*ENDIF
*ENDDO
*VWRITE
('*ELEMENT,TYPE=C3D15,ELSET=Esolid2')
Allsel,all
*GET,NumberofNode,NODE,,COUNT,,,,
ESEL,S,ENAME,,95 !
solid95单元20节点六面体
*GET,NElem,ELEM,,COUNT,,,, !
得到当前模型中的总单元数
!
对单元集进行循环
*GET,nd,ELEM,,NUM,MIN,,,, !
得到当前模型中的最小单元号
*DO,I,1,NElem
*GET,ENAME,ELEM,nd,ATTR,ENAM !
得到当前单元的类型
*IF,ENAME,EQ,95,THEN !
如果是95号(95号单元)
!
得到该单元的节点编号
*GET,EN1,ELEM,nd,NODE,1
*GET,EN2,ELEM,nd,NODE,2
*GET,EN3,ELEM,nd,NODE,3
*GET,EN4,ELEM,nd,NODE,4
*GET,EN5,ELEM,nd,NODE,5
*GET,EN6,ELEM,nd,NODE,6
*GET,EN7,ELEM,nd,NODE,7
*GET,EN8,ELEM,nd,NODE,8
*GET,EN9,ELEM,nd,NODE,9
*GET,EN10,ELEM,nd,NODE,10
*GET,EN11,ELEM,nd,NODE,11
*GET,EN12,ELEM,nd,NODE,12
*GET,EN13,ELEM,nd,NODE,13
*GET,EN14,ELEM,nd,NODE,14
*GET,EN15,ELEM,nd,NODE,15
*GET,EN16,ELEM,nd,NODE,16
*GET,EN17,ELEM,nd,NODE,17
*GET,EN18,ELEM,nd,NODE,18
*GET,EN19,ELEM,nd,NODE,19
*GET,EN20,ELEM,nd,NODE,20
ENN1=EN1
ENN2=EN2
ENN3=EN3
ENN4=EN5
ENN5=EN6
ENN6=EN7
x1=Nx(EN1)
y1=Ny(EN1)
Z1=Nz(EN1)
x2=Nx(EN2)
y2=Ny(EN2)
Z2=Nz(EN2)
ENN7=NumberofNode+(I-1)*5+1
ENN8=EN10
ENN9=EN12
x5=Nx(EN5)
y5=Ny(EN5)
Z5=Nz(EN5)
x6=Nx(EN6)
y6=Ny(EN6)
Z6=Nz(EN6)
ENN10=NumberofNode+(I-1)*5+2
ENN11=EN14
ENN12=EN16
ENN13=NumberofNode+(I-1)*5+3
ENN14=NumberofNode+(I-1)*5+4
ENN15=NumberofNode+(I-1)*5+5
x3=Nx(EN3)
y3=Ny(EN3)
Z3=Nz(EN3)
x7=Nx(EN7)
y7=Ny(EN7)
Z7=Nz(EN7)
*VWRITE,Chrval(ENN7),',',(X1+X2)/2,',',(y1+y2)/2,',',(z1+z2)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN10),',',(X5+X6)/2,',',(y5+y6)/2,',',(z5+z6)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN13),',',(X5+X1)/2,',',(y5+y1)/2,',',(z5+z1)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN14),',',(X6+X2)/2,',',(y6+y2)/2,',',(z6+z2)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN15),',',(X3+X7)/2,',',(y3+y7)/2,',',(z3+z7)/2
(A8,3(A1,F10.5))
nd=ELnext(nd)
*ENDIF
*ENDDO
!
输出实体单元
*VWRITE
('*ELEMENT,TYPE=C3D8,ELSET=Esolid1')
Allsel,all
运行以上命令后会在ANSYS的工作目录下得到名为ansystoabaqus.inp的文件,里面包含了模型的节点和单元信息。
接下来就是编写ABAQUS的inp文件了。
格式如下
*Heading
**Jobname:
imput Modelname:
^^^^
**Generatedby:
Abaqus/CAE6.9-1
*Preprint,echo=NO,model=NO,history=NO,contact=NO
**
**PARTS
**
*Part,name=^^^^^^^
*EndPart
**
**
**ASSEMBLY
**
*Assembly,name=Assembly
**
*Instance,name=^^^^^,part=^^^^^^
*Node
ansystoabaqus.inp中的节点文件
*Element,type=^^^^^
ansystoabaqus.inp中的单元文件
最后在ABAQUS中点主菜单FILE\IMPORT\MODEL,选择要导入的INP文件,在窗口顶部环境栏的MODEL下拉列表中,就会出现与此INP文件同名的模型。
ANSYS模型转到ABAQUS模型APDL
!
ANSYS命令流
!
将ANSYS模型文件转到ABAQUS模型文件
!
选中所有单元
Allsel,all
!
输出节点
*GET,NNode,NODE,,COUNT,,,, !
得到当前模型中的总节点数
*CFOPEN,Toabaqus,inp
*VWRITE
('*HEADING')
*VWRITE
('FractureMechanicalAnalysisofmetalcrackwithFRP')
*VWRITE
('*NODE,SYSTEM=R')
*DO,I,1,NNode
*VWRITE,Chrval(i),',',NX(I),',',NY(I),',',NZ(I)
(A8,A1,F10.5,A1,F10.5,A1,F10.5)
*ENDDO
Allsel,all
*GET,NumberofNode,NODE,,COUNT,,,,
ESEL,S,ENAME,,95
*GET,NElem,ELEM,,COUNT,,,, !
得到当前模型中的总单元数
!
对单元集进行循环
*GET,nd,ELEM,,NUM,MIN,,,, !
得到当前模型中的最小单元号
*DO,I,1,NElem
!
得到当前单元的类型
*GET,ENAME,ELEM,nd,ATTR,ENAM
!
如果是95号(95号单元)
*IF,ENAME,EQ,95,THEN
!
得到该单元的节点编号
*GET,EN1,ELEM,nd,NODE,1
*GET,EN2,ELEM,nd,NODE,2
*GET,EN3,ELEM,nd,NODE,3
*GET,EN4,ELEM,nd,NODE,4
*GET,EN5,ELEM,nd,NODE,5
*GET,EN6,ELEM,nd,NODE,6
*GET,EN7,ELEM,nd,NODE,7
*GET,EN8,ELEM,nd,NODE,8
*GET,EN9,ELEM,nd,NODE,9
*GET,EN10,ELEM,nd,NODE,10
*GET,EN11,ELEM,nd,NODE,11
*GET,EN12,ELEM,nd,NODE,12
*GET,EN13,ELEM,nd,NODE,13
*GET,EN14,ELEM,nd,NODE,14
*GET,EN15,ELEM,nd,NODE,15
*GET,EN16,ELEM,nd,NODE,16
*GET,EN17,ELEM,nd,NODE,17
*GET,EN18,ELEM,nd,NODE,18
*GET,EN19,ELEM,nd,NODE,19
*GET,EN20,ELEM,nd,NODE,20
ENN1=EN1
ENN2=EN2
ENN3=EN3
ENN4=EN5
ENN5=EN6
ENN6=EN7
x1=Nx(EN1)
y1=Ny(EN1)
Z1=Nz(EN1)
x2=Nx(EN2)
y2=Ny(EN2)
Z2=Nz(EN2)
ENN7=NumberofNode+(I-1)*5+1
ENN8=EN10
ENN9=EN12
x5=Nx(EN5)
y5=Ny(EN5)
Z5=Nz(EN5)
x6=Nx(EN6)
y6=Ny(EN6)
Z6=Nz(EN6)
ENN10=NumberofNode+(I-1)*5+2
ENN11=EN14
ENN12=EN16
ENN13=NumberofNode+(I-1)*5+3
ENN14=NumberofNode+(I-1)*5+4
ENN15=NumberofNode+(I-1)*5+5
x3=Nx(EN3)
y3=Ny(EN3)
Z3=Nz(EN3)
x7=Nx(EN7)
y7=Ny(EN7)
Z7=Nz(EN7)
*VWRITE,Chrval(ENN7),',',(X1+X2)/2,',',(y1+y2)/2,',',(z1+z2)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN10),',',(X5+X6)/2,',',(y5+y6)/2,',',(z5+z6)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN13),',',(X5+X1)/2,',',(y5+y1)/2,',',(z5+z1)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN14),',',(X6+X2)/2,',',(y6+y2)/2,',',(z6+z2)/2
(A8,3(A1,F10.5))
*VWRITE,Chrval(ENN15),',',(X3+X7)/2,',',(y3+y7)/2,',',(z3+z7)/2
(A8,3(A1,F10.5))
nd=ELnext(nd)
*ENDIF
*ENDDO
!
输出实体单元
*VWRITE
('*ELEMENT,TYPE=C3D8,ELSET=Esolid1')
Allsel,all
ESEL,S,ENAME,,45
*GET,NElem,ELEM,,COUNT,,,, !
得到当前模型中的总单元数
!
对单元集进行循环
*GET,nd,ELEM,,NUM,MIN,,,,
*DO,I,1,NElem
!
得到当前单元的类型
*GET,ENAME,ELEM,nd,ATTR,ENAM
!
如果是45号(45号单元)
*IF,ENAME,EQ,45,THEN
!
得到该单元的节点编号
*GET,EN1,ELEM,nd,NODE,1
*GET,EN2,ELEM,nd,NODE,2
*GET,EN3,ELEM,nd,NODE,3
*GET,EN4,ELEM,nd,NODE,4
*GET,EN5,ELEM,nd,NODE,5
*GET,EN6,ELEM,nd,NODE,6
*GET,EN7,ELEM,nd,NODE,7
*GET,EN8,ELEM,nd,NODE,8
*VWRITE,Chrval(nd),',',Chrval(EN1),',',Chrval(EN2),',',Chrval(EN3),',',Chrval(EN4),',',Chrval(EN5),',',Chrval(EN6),',',Chrval(EN7),',',Chrval(EN8)
(A8,8(A1,A8))
nd=ELnext(nd)
*ENDIF
*ENDDO
*VWRITE
('*ELEMENT,TYPE=C3D15,ELSET=Esolid2')
Allsel,all
*GET,NumberofNode,NODE,,COUNT,,,,
ESEL,S,ENAME,,95
*GET,NElem,ELEM,,COUNT,,,, !
得到当前模型中的总单元数
!
对单元集进行循环
*GET,nd,ELEM,,NUM,MIN,,,,
*DO,I,1,NElem
!
得到当前单元的类型
*GET,ENAME,ELEM,nd,ATTR,ENAM
!
如果是95号(95号单元)
*IF,ENAME,EQ,95,THEN
!
得到该单元的节点编号
*GET,EN1,ELEM,nd,NODE,1
*GET,EN2,ELEM,nd,NODE,2
*GET,EN3,ELEM,nd,NODE,3
*GET,EN4,ELEM,nd,NODE,4
*GET,EN5,ELEM,nd,NODE,5
*GET,EN6,ELEM,nd,NODE,6
*GET,EN7,ELEM,nd,NODE,7
*GET,EN8,ELEM,nd,NODE,8
*GET,EN9,ELEM,nd,NODE,9
*GET,EN10,ELEM,nd,NODE,10
*GET,EN11,ELEM,nd,NODE,11
*GET,EN12,ELEM,nd,NODE,12
*GET,EN13,ELEM,nd,NODE,13
*GET,EN14,ELEM,nd,NODE,14
*GET,EN15,ELEM,nd,NODE,15
*GET,EN16,ELEM,nd,NODE,16
*GET,EN17,ELEM,nd,NODE,17
*GET,EN18,ELEM,nd,NODE,18
*GET,EN19,ELEM,nd,NODE,19
*GET,EN20,ELEM,nd,NODE,20
ENN1=EN1
ENN2=EN2
ENN3=EN3
ENN4=EN5
ENN5=EN6
ENN6=EN7
x1=Nx(EN1)
y1=Ny(EN1)
Z1=Nz(EN1)
x2=Nx(EN2)
y2=Ny(EN2)
Z2=Nz(EN2)
ENN7=NumberofNode+(I-1)*5+1
ENN8=EN10
ENN9=EN12
x5=Nx(EN5)
y5=Ny(EN5)
Z5=Nz(EN5)
x6=Nx(EN6)
y6=Ny(EN6)
Z6=Nz(EN6)
ENN10=NumberofNode+(I-1)*5+2
ENN11=EN14
ENN12=EN16
ENN13=NumberofNode+(I-1)*5+3
ENN14=NumberofNode+(I-1)*5+4
ENN15=NumberofNode+(I-1)*5+5
x3=Nx(EN3)
y3=Ny(EN3)
Z3=Nz(EN3)
x7=Nx(EN7)
y7=Ny(EN7)
Z7=Nz(EN7)
*VWRITE,Chrval(nd),',',Chrval(ENN1),',',Chrval(ENN2),',',Chrval(ENN3),',',Chrval(ENN4),',',Chrval(ENN5),',',Chrval(ENN6),',',Chrval(ENN7),','
(A8,A1,7(A8,A1))
*VWRITE,Chrval(ENN8),',',Chrval(ENN9),',',Chrval(ENN10),',',Chrval(ENN11),',',Chrval(ENN12),',',Chrval(ENN13),',',Chrval(ENN14),',',Chrval(ENN15)
(7(A8,A1),A8)
nd=ELnext(nd)
*ENDIF
*ENDDO
Allsel,all
*VWRITE
('*SOLIDSECTION,MATERIAL=Steel,ELSET=Esolid1')
*VWRITE
('1.,')
*VWRITE
('*SOLIDSECTION,MATERIAL=Steel,ELSET=Esolid2')
*VWRITE
('1.,')
*VWRITE
('*MATERIAL,NAME=Steel')
*VWRITE
('*ELASTIC')
*VWRITE,Esteel,',',Vsteel
(E9.1,A1,F5.1)
!
输出单元壳单元
*VWRITE
('*ELEMENT,TYPE=S4,ELSET=EShell')
Allsel,all
ESEL,S,ENAME,,63
*GET,NElem,ELEM,,COUNT,,,, !
得到当前模型中的总单元数
!
对单元集进行循环
*GET,nd,ELEM,,NUM,MIN,,,,
*DO,I,1,NElem
!
得到当前单元的类型
*GET,ENAME,ELEM,nd,ATTR,ENAM
!
如果是63号(63号单元)
*IF,ENAME,EQ,63,THEN
!
得到该单元的节点编号
*GET,EN1,ELEM,nd,NODE,1
*GET,EN2,ELEM,nd,NODE,2
*GET,EN3,ELEM,nd,NODE,3
*GET,EN4,ELEM,nd,NODE,4
*VWRITE,Chrval(nd),',',Chrval(EN1),',',Chrval(EN2),',',Chrval(EN3),',',Chrval(EN4)
(A8,4(A1,A8))
nd=ELnext(nd)
*ENDIF
*ENDDO
Allsel,all
*VWRITE
('*ShellSECTION,MATERIAL=FRP,ELSET=EShell')
*VWRITE,Chrval(tpatch),',','5'
(A8,A1,A1)
*VWRITE
('*Material,name=FRP')
*VWRITE
('*Elastic')
*VWR