使用脚本查找在abaqus中以线性模式创建的零件的边缘

时间:2018-07-06 15:17:16

标签: python scripting abaqus

我目前正在为我的MSc研究项目。我的项目涉及使用二进制建模技术评估机织粗纱面料。这意味着我将织物的编织形式表示为线/桁架,而将树脂/基质表示为简单的块。

我一直在编写代码以运行多个仿真,尽管目前我只想运行一个。我在Python方面的经验有限,我的Abaqus经验也有限。到目前为止,我已经能够创建我的几何图形,分配我的材料,创建截面并对所有零件进行网格划分。组件由矩阵,warp1,warp2,weft1和weft2组成。将它们放置到位后,我将定义线性图案以创建层压复合材料。这是在python脚本中完成的所有工作,我可以选择层数,纬线间距,经线等等fwd.I

我的问题如下:

  1. 由于我可以创建x个可以代表经纱和纬纱的零件,因此我希望能够选择每个零件和线性图案的所有边缘,并从中创建一个区域,这样我就可以创建矩阵的嵌入条件。到目前为止,我一直在使用findAtgetByBoundingBox,但是这些都需要使用零件的名称才能工作,如何使它动态选择而不依赖于有多少零件?我尝试使用rootAssembly.allinstances.edges.getByBoundingBox(....),但没有成功。我总是以空数组结尾。

这是模型看起来如何组装的示例。在这种情况下,有5层机织粗纱织物。

This is an example of how the model looks like assembled. In this case there are 5 layers of woven roving fabric.

  1. 我必须在经纱和纬纱之间建立弹簧连接。同样,由于零件很多,并且它们可以有x个数字,因此名称也不同,因此很难确保选择正确的零件对,并且确保弹簧连接在每个点之间。同样,我最大的问题是使零件的选择动态化。

如果有人可以帮助我解决此类问题,我将不胜感激!

这是一排手动添加​​的弹簧。它们应该是在经纬之间而不是层之间相互作用:

This is a row of springs added manually. They are supposed to serve as interaction between the crossing of warp and weft not between layers

1 个答案:

答案 0 :(得分:0)

希望正确理解您的描述:

mdbModel = mdb.models[modelName]
  1. 要选择所有当前的边,只要在rootAssemblyallEdges = [eachEdge for eachEdge in eachInstance.edges for eachInstance in mdbModel.rootAssembly.instances.values()]中确实存在这些实例,就可以遍历Assembly中的实例。创建集合并在集合之间进行操作可以简化操作。

  2. 在复制每个实例时,为其分配一个名称,使其易于识别(例如,instanceName="Instance_1_3"用于重复i=1j=3处的位置。然后,您可以只需在mdbModel.rootAssembly.instances["Instance_1_2"]方向上寻找i的前一个邻居,依此类推。如果您想在两个接近的点之间进行简单弹跳,则可以迭代边界节点并进行{{ 1}}在相邻部分的节点上。