The theory and objectives underlaying this example is described in the course Lightweight Design.
The model is a minor modification of the Drive shaft where the torque is replaced by a compressive force:
from abaqus import *
from abaqusConstants import *
def column(modelname,r, L, t, F, esize, E, v, rho):
mod = mdb.Model(name=modelname, modelType=STANDARD_EXPLICIT)
# Part
ske = mod.ConstrainedSketch(name='__profile__', sheetSize=200.0)
ske.CircleByCenterPerimeter(center=(0.0, 0.0), point1=(0.0, r))
prt = mod.Part(name='Tube', dimensionality=THREE_D, type=DEFORMABLE_BODY)
prt.BaseShellExtrude(sketch=ske, depth=L)
del mod.sketches['__profile__']
# Sets of edges
for edge in prt.edges:
if edge.pointOn[0][2] == 0:
prt.Set(name='Edge-1', edges=prt.edges[edge.index:edge.index+1])
if edge.pointOn[0][2] == L:
prt.Set(name='Edge-2', edges=prt.edges[edge.index:edge.index+1])
# Material and section
mod.Material(name='Mat1')
mod.materials['Mat1'].Density(table=((rho, ), ))
mod.materials['Mat1'].Elastic(table=((E, v), ))
mod.HomogeneousShellSection(name='Sec-1', material='Mat1', thickness=t)
region = prt.Set(faces=prt.faces, name='Set-faces')
prt.SectionAssignment(region=region, sectionName='Sec-1', offsetType=MIDDLE_SURFACE)
prt.seedPart(size=esize, deviationFactor=0.1, minSizeFactor=0.1)
prt.generateMesh()
# Assembly
ass = mod.rootAssembly
ass.DatumCsysByDefault(CARTESIAN)
ins = ass.Instance(name='TubeIns', part=prt, dependent=ON)
# MPCs
rp1=ass.ReferencePoint(point=(0.0, 0.0, 0.0))
rreg1=ass.Set(referencePoints=(ass.referencePoints[rp1.id], ), name='RP1')
ereg1=ins.sets['Edge-1']
mod.MultipointConstraint(name='MPC-1', controlPoint=rreg1, surface=ereg1, mpcType=BEAM_MPC)
rp2=ass.ReferencePoint(point=(0.0, 0.0, L))
rreg2=ass.Set(referencePoints=(ass.referencePoints[rp2.id], ), name='RP2')
ereg2=ins.sets['Edge-2']
mod.MultipointConstraint(name='MPC-2', controlPoint=rreg2, surface=ereg2, mpcType=BEAM_MPC)
# Initial Bondary conditions
mod.DisplacementBC(name='BC-1', createStepName='Initial', region=rreg1,
u1=SET, u2=SET, u3=SET, ur1=SET, ur2=SET, ur3=SET)
mod.DisplacementBC(name='BC-2', createStepName='Initial', region=rreg2,
u1=SET, u2=SET, ur1=SET, ur2=SET, ur3=SET)
# Step and applied force
mod.BuckleStep(name='Step-Buckl', previous='Initial', numEigen=2, vectors=4, maxIterations=500)
mod.ConcentratedForce(name='Force', createStepName='Step-Buckl', region=rreg2, cf3=-F)
# Job
job = mdb.Job(name=modelname, model=modelname)
job.submit(consistencyChecking=OFF)
job.waitForCompletion()
# Result
odb = session.openOdb(name=modelname+'.odb')
try:
ev = abs(float(odb.steps['Step-Buckl'].frames[1].description.split('=')[1].strip()))
return [r, t, ev]
except:
return [0.0, 0.0, 0.0]
Using data from the case study Lightweight column where the analytical solution shows an eigenvalue equal to unity:
t = 3.69
r = 25-0.5*t # radius to the midplane of the shell
res = column(modelname='C1',r=r, L=2.0E3, t=t, F=100.0E3, esize=5, E=70000.0, v=0.33, rho=2700.0E-12)
print res
Result: