【发布时间】:2019-01-09 22:55:30
【问题描述】:
我正在尝试在 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 中发生的任何事情。
有什么想法吗?我可能错过了一些真正简单的东西。
谢谢,蒂姆
-----编辑-----
之前的问题通过使用 PartFromMesh 创建一个新部件来解决。
现在的问题是,当我尝试进入加载模块时,网格又消失了。当我尝试单击加载时,错误消息重新出现“装配不包含任何零件实例...,必须实例化零件...”
想法?
【问题讨论】:
-
我手头没有 Abaqus 可以检查,但是您是否保存模型并重新打开它以检查更改?有时通过脚本进行的更改在同一会话中不可见。
-
不...但我必须使用 PartFromMesh 并创建一个新零件。真的不确定正确的程序是什么。另外,现在如果我想应用载荷和边界条件,零件又会消失。
-
创建零件后,您应该使用
rootAssembly.Instance创建该零件的新实例(有关该命令的详细信息,请查看 Abaqus 脚本参考)。载荷应用于区域(集合或曲面),而不是零件,因此您也需要解决这个问题。最后,您可能还需要一些部分来定义材料属性。也许最好将您的问题分成几个问题,每个问题处理问题的一部分。 -
嘿,谢谢。帮助很大。现在一切正常。我需要了解 abaqus 中的工作流程。下次会分解问题。