from abaqus import * from abaqusConstants import * from caeModules import * modelname = 'example' partname = 'ball' setname_part = 'set-'+partname ballradius = 15.0 value_spacing = ballradius*3.0 ############################################################################## # create model mdb.Model(name=modelname, modelType=STANDARD_EXPLICIT) session.viewports['Viewport: 1'].setValues(displayedObject=None) session.viewports['Viewport: 1'].view.setProjection(projection=PARALLEL) # create part s1 = mdb.models[modelname].ConstrainedSketch(name='__profile__', sheetSize=200.0) g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints s1.setPrimaryObject(option=STANDALONE) s1.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0)) s1.FixedConstraint(entity=g[2]) s1.Line(point1=(0.0, ballradius), point2=(0.0, ballradius*(-1))) s1.VerticalConstraint(entity=g[3], addUndoState=False) s1.ParallelConstraint(entity1=g[2], entity2=g[3], addUndoState=False) s1.CoincidentConstraint(entity1=v[0], entity2=g[2], addUndoState=False) s1.ArcByCenterEnds(center=(0.0, 0.0), point1=(0.0, ballradius), point2=(0.0, ballradius*(-1)), direction=CLOCKWISE) s1.CoincidentConstraint(entity1=v[2], entity2=g[3], addUndoState=False) s1.EqualDistanceConstraint(entity1=v[0], entity2=v[1], midpoint=v[2], addUndoState=False) p = mdb.models[modelname].Part(name=partname, dimensionality=THREE_D, type=DEFORMABLE_BODY) p = mdb.models[modelname].parts[partname] p.BaseSolidRevolve(sketch=s1, angle=360.0, flipRevolveDirection=OFF) s1.unsetPrimaryObject() del mdb.models[modelname].sketches['__profile__'] # create part-level set with first (and only) cell of part c = p.cells cells = c[0:1] p.Set(cells=cells, name=setname_part) ############################################################################## # create material and section and assign section mdb.models[modelname].Material(name='steel') mdb.models[modelname].materials['steel'].Elastic(table=((210000.0, 0.3), )) mdb.models[modelname].materials['steel'].Density(table=((7.85e-09, ), )) mdb.models[modelname].HomogeneousSolidSection(name='Section-steel', material='steel', thickness=None) region_ball = p.sets[setname_part] p.SectionAssignment(region=region_ball, sectionName='Section-steel', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION) ############################################################################## # create instance and pattern a = mdb.models[modelname].rootAssembly a.DatumCsysByDefault(CARTESIAN) a.Instance(name=partname+'-1', part=p, dependent=ON) a.LinearInstancePattern(instanceList=(partname+'-1', ), direction1=(1.0, 0.0, 0.0), direction2=(0.0, 1.0, 0.0), number1=5, number2=5, spacing1=value_spacing, spacing2=value_spacing) ############################################################################## # create dummy step mdb.models[modelname].ExplicitDynamicsStep(name='Step-1', previous='Initial') ############################################################################## # create RP and rigid body constraint # iterate over all instances for iname in a.instances.keys(): # only the ball instances shall be used, so check that partname is in instancename if iname.find(partname)>-1: # get center of the one face of ball instance center = a.instances[iname].faces[0].getCentroid() # create RP in center and store RP object in variable x x = a.ReferencePoint(point=center[0]) # create rigid body constraint with id of latest RP and the existing set refPoints1=(a.referencePoints[x.id], ) region1=regionToolset.Region(referencePoints=refPoints1) region2=a.instances[iname].sets[setname_part] mdb.models[modelname].RigidBody(name='RB-'+iname, refPointRegion=region1, bodyRegion=region2) ############################################################################## # display assembly session.viewports['Viewport: 1'].setValues(displayedObject=a) session.viewports['Viewport: 1'].assemblyDisplay.setValues(renderStyle=SHADED) session.viewports['Viewport: 1'].view.setProjection(projection=PARALLEL) session.viewports['Viewport: 1'].view.fitView() # hide all datum axis in assembly session.viewports['Viewport: 1'].assemblyDisplay.geometryOptions.setValues( datumAxes=OFF)