# -*- coding: mbcs -*-
# Do not delete the following import lines
from abaqus import *
from abaqusConstants import *
import collections
import __main__
import section
import regionToolset
import displayGroupMdbToolset as dgm
import part
import material
import assembly
import optimization
import step
import interaction
import load
import mesh
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
modelName = 'COMPRESSION_XY'
periodicityLeftRight = True
periodicityBottomTop = True
#modelName = getInput('Enter model name:')
root = mdb.models[modelName].rootAssembly
# Clear all sets and equations connected to previous constaints
names = [set[0] for set in root.sets.items()]
for name in names:
if "PERIOD-" in name:
del root.sets[name]
names = [c[0] for c in mdb.models[modelName].constraints.items()]
for name in names:
if "PERIOD-" in name:
del mdb.models[modelName].constraints[name]
# Get nodes from edges. Sets need to be prepared before this step
leftSet = root.sets['LEFT'].nodes
rightSet = root.sets['RIGHT'].nodes
bottomSet = root.sets['BOTTOM'].nodes
topSet = root.sets['TOP'].nodes
# Connect Left to Right node
if periodicityLeftRight:
idsLR = collections.OrderedDict()
for nodeL in leftSet:
for nodeR in rightSet:
if nodeL.coordinates[1] == nodeR.coordinates[1]:
idsLR[nodeL.label] = nodeR.label
sortedLeft = tuple(idsLR.keys())
sortedRight = tuple(idsLR.values())
# Connect Bottom to Top node
if periodicityBottomTop:
idsBT = collections.OrderedDict()
for nodeB in bottomSet:
for nodeT in topSet:
if nodeB.coordinates[0] == nodeT.coordinates[0]:
idsBT[nodeB.label] = nodeT.label
sortedBottom = tuple(idsBT.keys())
sortedTop = tuple(idsBT.values())
i = 1
for n1, n2 in zip(sortedLeft, sortedRight):
leftSetName = "PERIOD-LEFT"+str(i)
rightSetName = "PERIOD-RIGHT"+str(i)
root.SetFromNodeLabels(name=leftSetName, nodeLabels=(('PART-1-1', (n1,)), ))
root.SetFromNodeLabels(name=rightSetName, nodeLabels=(('PART-1-1', (n2,)), ))
eqName = "PERIOD-1-"+str(i)
mdb.models[modelName].Equation(name=eqName, terms=((1.0, leftSetName, 1), (-1.0, rightSetName, 1), (1.0, 'REF-PT-1', 1), (0, 'REF-PT-1', 1)))
# eqName = "PERIOD-2-"+str(i)
# mdb.models[modelName].Equation(name=eqName, terms=((1.0, leftSetName, 2), (-1.0, rightSetName, 2), (1.0, 'REF-PT-2', 2), (0, 'REF-PT-2', 2)))
i += 1
for n1, n2 in zip(sortedBottom, sortedTop):
bottomSetName = "PERIOD-BOTTOM"+str(i)
topSetName = "PERIOD-TOP"+str(i)
root.SetFromNodeLabels(name=bottomSetName, nodeLabels=(('PART-1-1', (n1,)), ))
root.SetFromNodeLabels(name=topSetName, nodeLabels=(('PART-1-1', (n2,)), ))
eqName = "PERIOD-2-"+str(i)
mdb.models[modelName].Equation(name=eqName, terms=((1.0, bottomSetName, 2), (-1.0, topSetName, 2), (1.0, 'REF-PT-2', 2), (0, 'REF-PT-2', 2)))
# eqName = "PERIOD-1-"+str(i)
# mdb.models[modelName].Equation(name=eqName, terms=((1.0, bottomSetName, 1), (-1.0, topSetName, 1), (1.0, 'REF-PT-1', 1), (0, 'REF-PT-1', 1)))
i += 1