1

我正在尝试在 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 创建一个新零件,解决了之前的问题。

现在的问题是,当我尝试进入加载模块时,网格又消失了。当我尝试单击加载时,错误消息重新出现“装配不包含任何零件实例...,必须实例化零件...”

想法?

4

1 回答 1

0

孤立网格设施有一个非常具体的用途。
如果您只想像在 CAE 中那样创建网格,Python 命令是 .generateMesh():

mdb.models['YourModel'].parts['PartToBeMeshed'].generateMesh()

如果生成和使用孤立网格确实是您想要做的:设置每个节点的位置,导入某些部分......

答案已在评论中给出:

  1. 从您使用 .PartFromMesh() 命令创建的网格创建一个零件。如果您需要传递集合/表面/属性,它将新零件(字符串)的名称作为必需参数和 copySets:

    mdb.models['YourModel'].parts['PartToBeCopied'].PartFromMesh(name='NewPartName', copySets=True)  
    
  2. 您刚刚创建了一个仅包含 1 个特征和一个网格的新零件。您现在需要使用以下命令在程序集中实例化它:

    mdb.models['YourModel'].rootAssembly.Instance(name='YourInstanceName', part=mdb.models['YourModel'].parts['NewPartName'], dependent=True)
    

    Dependent 必须设置为 True,因为您希望在零件级别定义网格。

零件模块用于处理几何图形。装配模块可帮助您创建一个或多个相互交互的零件的装配。为了定义负载,需要一个包含至少一个零件、一组顶点/边/曲面/和/或/单元(将对其施加负载)以及将在其中施加负载的步骤的组件。

于 2019-01-09T14:55:30.013 回答