使用python在abaqus中从头开始生成孤立网格

时间:2014-11-25 15:35:52

标签: python abaqus

我正在尝试在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"程序集不包含任何部件实例...,部件必须是实例..."

想法?

1 个答案:

答案 0 :(得分: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)
    

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

零件模块在那里可以处理几何。装配模块可帮助您创建一个或多个相互交互的零件的装配。为了定义载荷,需要一个至少包含一个零件的装配体,一组将对其施加载荷的顶点/边/表面/和/或/单元以及一组载荷将被施加的步骤。 / p>