2

I am currently working on my research project for my MSc. My project involves evaluating woven roving fabric using binary modelling technique. This means I represent the weave of the fabric as line/trusses and the resin/matrix as a simple block.

I have been writing my code in order to run several simulations, although at the moment I would like to run only one. My experience in Python is somewhat limited and so is my Abaqus experience. So far I have been able to create my geometry, assign my material, create the section and mesh all the parts. The assembly is made of matrix, warp1, warp2, weft1 and weft2. Once I have placed them in position, I define the linear pattern in order to create the laminate composite. This has been done all in python scripting and I can select the number of layers, spacing of wefts, warps and so fwd.I

My problems are the following:

  1. Since I can create x number of parts which can represent my warps and wefts, I would like to be able to select all the edges of each part and linear pattern and create a region from it, this would allow me to then create an embedded condition for the matrix. So far I have been working with findAt and getByBoundingBox however these require the name of the part to work, how can I make it that it selects dynamically, independent of how many parts there is? I have attempted using rootAssembly.allinstances.edges.getByBoundingBox(....) but with no success. I always end up with an empty array.

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

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

  1. I must create spring connection between warp and weft points. Again since there are many parts and these can have x numbers and therefore different names, It becomes hard to ensure that the correct pair of parts is selected and that the spring is connected between each point. Again my biggest problem is to make the selection of the part dynamic.

If anyone could give me a hand with such problems I would really appreciate it!

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

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

kiner_shah
  • 3,939
  • 7
  • 23
  • 37
Lbrun
  • 21
  • 1

1 Answers1

0

Hoping to have understood your description correctly:

mdbModel = mdb.models[modelName]
  1. To select all the present edges you can just iterate through the instances in your Assembly, given that they are indeed present in the rootAssembly: allEdges = [eachEdge for eachEdge in eachInstance.edges for eachInstance in mdbModel.rootAssembly.instances.values()]. Creating sets and operating between sets along the way may simplify things.

  2. When you copy each instance, assign it a name that makes its coordinates easily identifiable (e.g. instanceName="Instance_1_3" for the repetition in position i=1 and j=3. Then, you can just look for mdbModel.rootAssembly.instances["Instance_1_2"] for its previous neighbor in the i direction and so on. If you want a simple spring between two points that are close, you can just iterate through the boundary nodes and do a getByBoundingSphere() on the nodes of the neighbor part.

Miguel
  • 150
  • 2
  • 10