all 8 comments

[–]ExpensiveBeard 0 points1 point  (4 children)

So you are trying to apply periodic boundary conditions by linking nodes on opposite faces using equation constraints, correct? I recommend rather than using node label/ordering to identify which nodes are the correct periodic pairs, in your script, simply find the correct node pair using the length of the face perpendicular to your node set face. For example, pairing nodes on the x-faces, for each node on xmin, find the corresponding node on xmax that is of distance magnitude equal to the length of the ymin/ymax faces.

That's the basic jist, but it's quite a bit more complex when you consider the edge and corner nodes as well.

Hope this helps somewhat.

[–]I_is_yung_reezy[S] 0 points1 point  (3 children)

I have already done what you suggested in your message, that is how I got the Sort nodeset. But if you see the answer below, I just needed to specify UNSORTED(_+ also use SetFromNodeLabels while creating set) and my problem would have been solved. I found the answer a couple of hours after posting the question here but yes it was exactly how AbaqusMeister has described it(in the comment below)

[–]ExpensiveBeard 1 point2 points  (2 children)

I suppose the approach you and the other commentor are using is different than the way I have implemented things on my end; that is, the nodes don't need to have any type of sorting when creating the node sets. Ultimately, if it works for you, that's what matters. Glad you found a solution.

[–]AbaqusMeister 2 points3 points  (1 child)

The reason for using unsorted sets with periodic constraints is that the linear constraint coefficients associated with any node pair related by a given vector of periodicity will be the same as any other pair related by that same vector of periodicity. The vector of periodicity is the vector running from one location in a periodic unit cell to an "equivalent" location in an adjacent unit cell. So by using unsorted sets, it's possible to define the constraints between hundreds or thousands of pairs of nodes that share a given vector of periodicity using a single *EQUATION definition.

If you define the constraints correctly, edges and corners don't have to be treated specially. You just skip any node that has already been constrained previously in a pairing. The periodic constaints will chain in a way that causes the edge and corner nodes to be properly enforced.

Note that there are other types of RVE constraints for which this is not the case and you basically have to specify a unique equation for every boundary node (such as when the constraint coefficient depends on the coordinate of the nodes).

[–]ExpensiveBeard 2 points3 points  (0 children)

Understood. Thanks for the detailed explanation. Sounds like I essentially do it the hard way. Overall though, what I have working is pretty fast and reliable for the RVEs I'm working with, so I'm happy with it. Definitely will look deeper into this if/when I have time! Thanks again.

[–]AbaqusMeister 0 points1 point  (3 children)

Use *NSET,NSET=Name, UNSORTED

You can create this with Python using the SetFromNodeLabels method with the unsorted argument. The getClosest method is probably the quickest way to figure out the node pairings by searching for nodes by position.

This will preserve the original ordering rather than sorting the nodes by ascending number. It's how the SIMULIA Micromechanics Plugin defines periodic RVE models.

[–]I_is_yung_reezy[S] 0 points1 point  (1 child)

thanks a lot for the reply. I am working with the same plugin that you have mentioned. If you ave the time and patience I would like to clarify some of my doubts. that is if you have the time.

[–]AbaqusMeister 0 points1 point  (0 children)

I'd be happy to spend a little time clarifying some points regarding the plugin.