我正在尝试在Abaqus 6.13中使用python生成孤立网格。含义我想指定每个节点的坐标位置,然后使用先前创建的节点创建元素的另一个函数。
我已经创建了一个节点和元素列表,但我不知道应该使用哪些方法将它们添加到abaqus中。
这会创建节点
p = mdb.models[nameModel].parts[namePart]
for z in range (0, z_max+1):
for y in range (0, y_max+1):
for x in range (0, x_max+1):
listNode.append(p.Node(coordinates=(x*x_div, y*y_div, z*z_div)))
这会创建元素
p = mdb.models[nameModel].parts[namePart]
#p.setElementType(ElemType(elemCode=C3D8R,elemLibrary=STANDARD))
for z in range (0, z_max):
for y in range (0, y_max):
for x in range (0, x_max):
listNodeNum=[]
listNodeObj=[]
listNodeNum.append(x+y*(x_max+1)+z*(x_max+1)*(y_max+1))
listNodeNum.append(x+y*(x_max+1)+z*(x_max+1)*(y_max+1)+1)
listNodeNum.append(x+(y+1)*(x_max+1)+z*(x_max+1)*(y_max+1)+1)
listNodeNum.append(x+(y+1)*(x_max+1)+z*(x_max+1)*(y_max+1))
listNodeNum.append(x+y*(x_max+1)+(z+1)*(x_max+1)*(y_max+1))
listNodeNum.append(x+y*(x_max+1)+(z+1)*(x_max+1)*(y_max+1)+1)
listNodeNum.append(x+(y+1)*(x_max+1)+(z+1)*(x_max+1)*(y_max+1)+1)
listNodeNum.append(x+(y+1)*(x_max+1)+(z+1)*(x_max+1)*(y_max+1))
for num in listNodeNum:
listNodeObj.append(listNode[num])
listElem.append(p.Element(nodes=listNodeObj,elemShape=HEX8))
return listElem
没有错误,列表长度正确,但我无法看到abaqus中发生的任何事情。
有什么想法吗?我可能错过了一些非常简单的事情。
谢谢,蒂姆
----- ------ EDIT
使用PartFromMesh创建新零件解决了上一个问题。
现在的问题是,当我尝试进入加载模块时,网格会再次消失。当我尝试点击加载时,错误消息reass"程序集不包含任何部件实例...,部件必须是实例..."
想法?
答案 0 :(得分:0)
孤立网格工具有非常特殊的用途。
如果您只想像在CAE中那样创建网格,则Python命令是.generateMesh():
mdb.models['YourModel'].parts['PartToBeMeshed'].generateMesh()
如果真的要生成和使用孤立网格,请执行以下操作:设置每个节点的位置,导入某些部分...
答案已在评论中给出:
从使用.PartFromMesh()命令创建的网格中创建零件。它将新零件(字符串)的名称作为必需的参数,如果需要将结点/曲面/属性沿用,则使用copySets:
mdb.models['YourModel'].parts['PartToBeCopied'].PartFromMesh(name='NewPartName', copySets=True)
您刚刚创建了一个仅包含1个要素和一个网格的新零件。现在,您需要使用以下命令在程序集中实例化它:
mdb.models['YourModel'].rootAssembly.Instance(name='YourInstanceName', part=mdb.models['YourModel'].parts['NewPartName'], dependent=True)
从属关系必须设置为True,因为您希望在零件级别定义网格。
零件模块在那里可以处理几何。装配模块可帮助您创建一个或多个相互交互的零件的装配。为了定义载荷,需要一个至少包含一个零件的装配体,一组将对其施加载荷的顶点/边/表面/和/或/单元以及一组载荷将被施加的步骤。 / p>