Abaqus是一套功能强大的工程模拟的有限元软件,其解决问题的范围从相对简单的线性分析到许多复杂的非线性问题。为了提高仿真效率小编对Abaqus的二次开发进行了研究,基于Abaqus的批处理技术开发了面向某设备的 自动化 仿真工具,进行了仿真模型的参数化建立、自动装配、网格自动划分、载荷自动添加、边界条件的自动添加、仿真结果自动提取及仿真报告自动生成,最终开发了基于Abaqus的无人值守、全自动、快速专家仿真工具。
ABAQUS 是一套功能强大的工程模拟的有限元软件,其解决问题的范围从相对简单的线性分析到许多复杂的非线性问题。 ABAQUS 包括一个丰富的、可模拟任意几何形状的单元库。并拥有各种类型的材料 模型库 ,可以模拟典型工程材料的性能,其中包括金属、橡胶、高分子材料、复合材料、钢筋混凝土、可压缩超弹性泡沫材料以及土壤和岩石等地质材料。作为通用的模拟工具, ABAQUS 除了能解决大量结构(应力 / 位移)问题,还可以模拟其他工程领域的许多问题,例如热传导、质量扩散、热电耦合分析、声学分析、岩土力学分析(流体渗透 / 应力耦合分析)及压电介质分析。
从CAE软件二次开发的角度而言,区别于ANSYS等其他CAE软件,Abaqus是个很容易开发的软件。Abaqus在运行的时候,会自动生成大部分操作的 python 语言的.rpy操作日志文件,这个文件一般在如下的路径中。
\SIMULIA\Temp

这个文件是对Abaqus进而二次开发的强大武器,要熟悉指定操作对应的脚本需要每操作一步就查看文件中对应的脚本。
刚才说到abaqus二次开发用到的编程语言是python,可能好多同学望而却步了,毕竟能想到搞这个软件开发的大多数还是非计算机专业的同学。这里小编要给大家一颗定心丸,不懂编程也不意味着开发不了abaqus。abaqus用到的那些python语句基本都是软件内部定义的,大家完全可以把它当成一种标记型的语言理解就好,只要能将具体的脚本和对应的操作对应起来就可以实现abaqus的二次开发。
总结一下,abaqus的编程语言是python,只要看懂abaqus记录操作的.rpy文件就可以进行abaqus的二次开发。
前处理包括参数化建模、自动划分网格、添加约束载荷等。下面给出了我自己封装的参数化建模、装配模型、划分网格、添加约束载荷及添加分析步的脚本,有一说一都是一步步操作然后查看.rpy文件生成的对应的脚本整理的。过程虽然很辛苦,但是疗效还是不错的。
def parametric_modeling():
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
p = mdb.models['Model-1'].parts['Part-1']
s = p.features['Shell planar-1'].sketch
mdb.models['Model-1'].ConstrainedSketch(name='__edit__', objectToCopy=s)
s1 = mdb.models['Model-1'].sketches['__edit__']
g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints
s1.setPrimaryObject(option=SUPERIMPOSE)
p.projectReferencesOntoSketch(sketch=s1,upToFeature=p.features['Shell planar-1'], filter=COPLANAR_EDGES)
#--------------------删除旧约束------------------------------------
s1.delete(objectList=(d[1],))
s1.delete(objectList=(d[0],))
s1.delete(objectList=(d[3],))
s1.delete(objectList=(d[4],))
s1.delete(objectList=(d[2],))
s1.delete(objectList=(d[5],))
s1.delete(objectList=(d[13],))
s1.delete(objectList=(d[6],))
s1.delete(objectList=(d[7],))
s1.delete(objectList=(d[8],))
s1.delete(objectList=(d[9],))
s1.delete(objectList=(d[10],))
s1.delete(objectList=(d[11],))
s1.delete(objectList=(d[12],))
#--------------------添加新的约束------------------------------------
s1.RadialDimension(curve=g[4], textPoint=(123.286316143786, 0.258663984079395), radius=simuinfo[""]["R4"]["value"] )
s1.DistanceDimension(entity1=v[2], entity2=g[2], textPoint=(69.2119979858398, -14.4988307952881), value=simuinfo[""]["Distan1"]["value"])
s1.RadialDimension(curve=g[5], textPoint=(119.733726501465, 1.4805303812027), radius=simuinfo[""]["R3"]["value"])
s1.HorizontalDimension(vertex1=v[5], vertex2=v[2], textPoint=(122.07674407959, -0.124851405620575), value=simuinfo[""]["h1"]["value"])
s1.VerticalDimension(vertex1=v[5], vertex2=v[2], textPoint=(120.597770690918, 0.413793683052063), value=simuinfo[""]["h2"]["value"])
s1.DistanceDimension(entity1=g[7], entity2=g[3], textPoint=(126.956832885742, 0.931050896644592), value=simuinfo[""]["H"]["value"])
s1.RadialDimension(curve=g[8], textPoint=(123.122192382813, 2.98901391029358), radius=simuinfo[""]["R1"]["value"])
s1.RadialDimension(curve=g[9], textPoint=(121.781723022461, 2.07928419113159),<
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删