1 # -*- coding: mbcs -*-
2 #
3 # Abaqus/CAE Release 6.14-4 replay file
4 # Internal Version: 2015_06_12-04.41.13 135079
5 # Run by Administrator on Wed Apr 12 08:41:02 2017
6 #
7
8 # from driverUtils import executeOnCaeGraphicsStartup
9 # executeOnCaeGraphicsStartup()
10 #: Executing "onCaeGraphicsStartup()" in the site directory ...
11 #: Abaqus Error:
12 #: This error may have occurred due to a change to the Abaqus Scripting
13 #: Interface. Please see the Abaqus Scripting Manual for the details of
14 #: these changes. Also see the "Example environment files" section of
15 #: the Abaqus Site Guide for up-to-date examples of common tasks in the
16 #: environment file.
17 #: Execution of "onCaeGraphicsStartup()" in the site directory failed.
18 from abaqus import *
19 from abaqusConstants import *
20 session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=414.662475585938,
21 height=253.647216796875)
22 session.viewports['Viewport: 1'].makeCurrent()
23 session.viewports['Viewport: 1'].maximize()
24 from caeModules import *
25 from driverUtils import executeOnCaeStartup
26 executeOnCaeStartup()
27 session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
28 referenceRepresentation=ON)
29 Mdb()
30
31 # set the absoluteZero
32 mdb.models['Model-1'].setValues(absoluteZero=-273)
33
34 from math import *
35
36 # make the cutter dimension that you want
37 cutterLength = 0.5
38 cutterPointPos = cutterLength/2
39 rakeAngle = 8.0
40 clearanceAngle = 15.0
41
42
43 #: A new model database has been created.
44 #: The model "Model-1" has been created.
45 session.viewports['Viewport: 1'].setValues(displayedObject=None)
46 s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=cutterLength)
47 g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
48 s.setPrimaryObject(option=STANDALONE)
49 s.rectangle(point1=(-cutterPointPos, cutterPointPos), point2=(cutterPointPos, -cutterPointPos))
50 p = mdb.models['Model-1'].Part(name='cutter', dimensionality=THREE_D,
51 type=DISCRETE_RIGID_SURFACE)
52 p = mdb.models['Model-1'].parts['cutter']
53 p.BaseShellExtrude(sketch=s, depth=cutterLength)
54 s.unsetPrimaryObject()
55
56 # make rake angle
57 p = mdb.models['Model-1'].parts['cutter']
58 f1, e1 = p.faces, p.edges
59 t = p.MakeSketchTransform(sketchPlane=f1[2], sketchUpEdge=e1[8],
60 sketchPlaneSide=SIDE1, sketchOrientation=TOP)
61 s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=cutterLength**2,
62 gridSpacing=cutterLength**2/50, transform=t)
63 g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
64 s.setPrimaryObject(option=SUPERIMPOSE)
65 p = mdb.models['Model-1'].parts['cutter']
66 p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)
67 s.Line(point1=(cutterPointPos, -cutterPointPos), point2=(0, cutterPointPos))
68 s.CoincidentConstraint(entity1=v[4], entity2=g[4], addUndoState=False)
69 s.Line(point1=(0, cutterPointPos), point2=(cutterPointPos, cutterPointPos))
70 s.HorizontalConstraint(entity=g[9], addUndoState=False)
71 s.Line(point1=(cutterPointPos, cutterPointPos), point2=(cutterPointPos, -cutterPointPos))
72 s.VerticalConstraint(entity=g[10], addUndoState=False)
73 s.PerpendicularConstraint(entity1=g[9], entity2=g[10], addUndoState=False)
74 s.AngularDimension(line1=g[3], line2=g[8], textPoint=(cutterPointPos - tan(rakeAngle*pi/180)*cutterPointPos/2,
75 0.0), value=rakeAngle)
76 p = mdb.models['Model-1'].parts['cutter']
77 f, e = p.faces, p.edges
78 p.CutExtrude(sketchPlane=f[2], sketchUpEdge=e[8], sketchPlaneSide=SIDE1,
79 sketchOrientation=TOP, sketch=s, flipExtrudeDirection=ON)
80 s.unsetPrimaryObject()
81 del mdb.models['Model-1'].sketches['__profile__']
82
83 # make clearance angle
84 p = mdb.models['Model-1'].parts['cutter']
85 f, e = p.faces, p.edges
86 t = p.MakeSketchTransform(sketchPlane=f[0], sketchUpEdge=e[1],
87 sketchPlaneSide=SIDE1, sketchOrientation=TOP, origin=(cutterPointPos, 0.0, cutterPointPos))
88 s1 = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
89 sheetSize=cutterLength**2, gridSpacing=cutterLength**2/50, transform=t)
90 g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints
91 s1.setPrimaryObject(option=SUPERIMPOSE)
92 p = mdb.models['Model-1'].parts['cutter']
93 p.projectReferencesOntoSketch(sketch=s1, filter=COPLANAR_EDGES)
94 session.viewports['Viewport: 1'].setValues(displayedObject=p)
95 s1.Line(point1=(cutterPointPos, -cutterPointPos), point2=(-cutterPointPos, 0))
96 s1.CoincidentConstraint(entity1=v[4], entity2=g[4], addUndoState=False)
97 s1.Line(point1=(-cutterPointPos, 0), point2=(-cutterPointPos, -cutterPointPos))
98 s1.VerticalConstraint(entity=g[9], addUndoState=False)
99 s1.Line(point1=(-cutterPointPos, -cutterPointPos), point2=(cutterPointPos, -cutterPointPos))
100 s1.HorizontalConstraint(entity=g[10], addUndoState=False)
101 s1.PerpendicularConstraint(entity1=g[9], entity2=g[10], addUndoState=False)
102 s1.AngularDimension(line1=g[8], line2=g[5], textPoint=(0,
103 -cutterPointPos + tan(clearanceAngle*pi/180)*cutterPointPos/2), value=clearanceAngle)
104 p = mdb.models['Model-1'].parts['cutter']
105 f1, e1 = p.faces, p.edges
106 p.CutExtrude(sketchPlane=f1[0], sketchUpEdge=e1[1], sketchPlaneSide=SIDE1,
107 sketchOrientation=TOP, sketch=s1, flipExtrudeDirection=ON)
108 s1.unsetPrimaryObject()
109 del mdb.models['Model-1'].sketches['__profile__']
110
111 # connect the separete faces
112 p = mdb.models['Model-1'].parts['cutter']
113 e = p.edges
114 p.ShellLoft(loftsections=((e[0], ), (e[7], )), startCondition=NONE,
115 endCondition=NONE)
116 p = mdb.models['Model-1'].parts['cutter']
117 e1 = p.edges
118 p.ShellLoft(loftsections=((e1[4], ), (e1[11], )), startCondition=NONE,
119 endCondition=NONE)
120 p = mdb.models['Model-1'].parts['cutter']
121 e = p.edges
122 p.ShellLoft(loftsections=((e[8], ), (e[11], )), startCondition=NONE,
123 endCondition=NONE)
124
125 # make the reference point
126 p = mdb.models['Model-1'].parts['cutter']
127 v1, e, d1, n = p.vertices, p.edges, p.datums, p.nodes
128 p.ReferencePoint(point=p.InterestingPoint(edge=e[1], rule=MIDDLE))
129
130
131 # set the reference point named cutter
132 p = mdb.models['Model-1'].parts['cutter']
133 r = p.referencePoints
134 refPoints=(r[7], )
135 p.Set(referencePoints=refPoints, name='cutter')
136
137
138 # make the workpiece dimension that you want
139 workpieceLength = 0.2 #the length of the workpiece
140 workpieceHeight = 0.1 #the thickness of the workpiece
141 workpieceDepth = 0.1 #the width of the workpiece
142 workpiecePointPosX = workpieceLength/2
143 workpiecePointPosY = workpieceHeight/2
144 cutDepth = 0.01 #the equivalent thickness of the workpiece
145
146
147 # make the workpiece
148 s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=workpieceLength)
149 g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
150 s.setPrimaryObject(option=STANDALONE)
151 s.rectangle(point1=(-workpiecePointPosX, workpiecePointPosY), point2=(workpiecePointPosX, -workpiecePointPosY))
152 p = mdb.models['Model-1'].Part(name='workpiece', dimensionality=THREE_D,
153 type=DEFORMABLE_BODY)
154 p = mdb.models['Model-1'].parts['workpiece']
155 p.BaseSolidExtrude(sketch=s, depth=workpieceDepth)
156 s.unsetPrimaryObject()
157
158
159 # make the seperate part
160 p = mdb.models['Model-1'].parts['workpiece']
161 f, e, d1 = p.faces, p.edges, p.datums
162 t = p.MakeSketchTransform(sketchPlane=f[4], sketchUpEdge=e[10],
163 sketchPlaneSide=SIDE1, sketchOrientation=TOP)
164 s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
165 sheetSize=workpieceLength*2, gridSpacing=workpieceLength*2/50, transform=t)
166 g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
167 s.setPrimaryObject(option=SUPERIMPOSE)
168 p = mdb.models['Model-1'].parts['workpiece']
169 p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)
170 s.Line(point1=(-workpiecePointPosX, workpiecePointPosY), point2=(-workpiecePointPosX, workpiecePointPosY - cutDepth*2))
171 s.VerticalConstraint(entity=g[6], addUndoState=False)
172 s.ParallelConstraint(entity1=g[4], entity2=g[6], addUndoState=False)
173 s.CoincidentConstraint(entity1=v[4], entity2=g[4], addUndoState=False)
174 s.Line(point1=(-workpiecePointPosX, workpiecePointPosY - cutDepth*2), point2=(workpiecePointPosX, workpiecePointPosY - cutDepth*2))
175 s.HorizontalConstraint(entity=g[7], addUndoState=False)
176 s.PerpendicularConstraint(entity1=g[6], entity2=g[7], addUndoState=False)
177 s.CoincidentConstraint(entity1=v[5], entity2=g[2], addUndoState=False)
178 s.Line(point1=(workpiecePointPosX, workpiecePointPosY - cutDepth*2), point2=(workpiecePointPosX, workpiecePointPosY))
179 s.VerticalConstraint(entity=g[8], addUndoState=False)
180 s.PerpendicularConstraint(entity1=g[7], entity2=g[8], addUndoState=False)
181 s.Line(point1=(workpiecePointPosX, workpiecePointPosY), point2=(-workpiecePointPosX, workpiecePointPosY))
182 s.HorizontalConstraint(entity=g[9], addUndoState=False)
183 s.PerpendicularConstraint(entity1=g[8], entity2=g[9], addUndoState=False)
184 p = mdb.models['Model-1'].parts['workpiece']
185 f = p.faces
186 pickedFaces = f.getSequenceFromMask(mask=('[#10 ]', ), )
187 e1, d2 = p.edges, p.datums
188 p.PartitionFaceBySketch(sketchUpEdge=e1[10], faces=pickedFaces,
189 sketchOrientation=TOP, sketch=s)
190 s.unsetPrimaryObject()
191 del mdb.models['Model-1'].sketches['__profile__']
192 p = mdb.models['Model-1'].parts['workpiece']
193 c = p.cells
194 pickedCells = c.getSequenceFromMask(mask=('[#1 ]', ), )
195 e, d1 = p.edges, p.datums
196 pickedEdges =(e[0], )
197 p.PartitionCellByExtrudeEdge(line=e[7], cells=pickedCells, edges=pickedEdges,
198 sense=REVERSE)
199
200 #give the TC4 material to the workpiece
201 #create the material
202 from material import createMaterialFromDataString
203 createMaterialFromDataString('Model-1', 'Ti6Al4V-Shenyang', '6-14',
204 """{
205 'description': '',
206 'inelasticHeatFraction': {'fraction': 0.9},
207 'expansion': {'temperatureDependency': OFF, 'userSubroutine': OFF, 'zero': 0.0, 'dependencies': 0, 'table': ((9.1e-06,),), 'type': ISOTROPIC},
208 'materialIdentifier': '',
209 'johnsonCookDamageInitiation': {'temperatureDependency': OFF, 'definition': MSFLD, 'direction': NMORI, 'fnt': 10.0, 'position': CENTROID, 'damageEvolution': {'temperatureDependency': OFF, 'dependencies': 0, 'softening': LINEAR, 'power': None, 'table': ((0.05,),), 'mixedModeBehavior': MODE_INDEPENDENT, 'type': DISPLACEMENT, 'modeMixRatio': ENERGY, 'degradation': MAXIMUM}, 'table': ((-0.09, 0.25, -0.5, 0.014, 3.87, 1650.0, 20.0, 1.0),), 'ks': 0.0, 'tolerance': 0.05, 'dependencies': 0, 'frequency': 1, 'feq': 10.0, 'alpha': 0.0, 'fnn': 10.0, 'omega': 1.0, 'numberImperfections': 4},
210 'conductivity': {'temperatureDependency': ON, 'table': ((6.8, 20.0), (7.4, 100.0), (8.7, 200.0), (9.8, 300.0), (10.3, 400.0), (11.8, 500.0)), 'dependencies': 0, 'type': ISOTROPIC},
211 'name': 'Ti6Al4V-Shenyang',
212 'elastic': {'temperatureDependency': ON, 'moduli': LONG_TERM, 'noCompression': OFF, 'noTension': OFF, 'dependencies': 0, 'table': ((109000.0, 0.34, 20.0), (97000.0, 0.34, 150.0), (91000.0, 0.34, 250.0), (85000.0, 0.34, 350.0), (75000.0, 0.34, 450.0)), 'type': ISOTROPIC},
213 'density': {'temperatureDependency': OFF, 'table': ((4.44e-09,),), 'dependencies': 0, 'fieldName': '', 'distributionType': UNIFORM},
214 'plastic': {'temperatureDependency': OFF, 'strainRangeDependency': OFF, 'rate': OFF, 'dependencies': 0, 'hardening': JOHNSON_COOK, 'rateDependent': {'temperatureDependency': OFF, 'table': ((0.01, 1.0),), 'dependencies': 0, 'type': JOHNSON_COOK}, 'dataType': HALF_CYCLE, 'table': ((875.0, 793.0, 0.386, 0.71, 1650.0, 20.0),), 'numBackstresses': 1},
215 'specificHeat': {'temperatureDependency': ON, 'table': ((611000000.0, 20.0), (624000000.0, 100.0), (653000000.0, 300.0), (674000000.0, 400.0), (691000000.0, 500.0), (703000000.0, 600.0)), 'dependencies': 0, 'law': CONSTANTVOLUME}
216 }""")
217 #: Material 'Ti6Al4V-Shenyang' has been copied to the current model.
218 # give the material to the section
219 mdb.models['Model-1'].HomogeneousSolidSection(name='TC4',
220 material='Ti6Al4V-Shenyang', thickness=None)
221 # give the section to the model
222 p = mdb.models['Model-1'].parts['workpiece']
223 c = p.cells
224 cells = c.getSequenceFromMask(mask=('[#3 ]', ), )
225 region = regionToolset.Region(cells=cells)
226 p = mdb.models['Model-1'].parts['workpiece']
227 p.SectionAssignment(region=region, sectionName='TC4', offset=0.0,
228 offsetType=MIDDLE_SURFACE, offsetField='',
229 thicknessAssignment=FROM_SECTION)
230
231 #the size of the cutting region
232 sizeOfCutting = 0.05
233 numOfNoneCutting = 4
234
235
236 # mesh the workpiece
237 p = mdb.models['Model-1'].parts['workpiece']
238 e = p.edges
239 pickedEdges = e.getSequenceFromMask(mask=('[#c2025 ]', ), )
240 #p.seedEdgeByNumber(edges=pickedEdges, number=int(workpieceLength/sizeOfCutting), constraint=FINER)
241 p.seedEdgeByNumber(edges=pickedEdges, number=, constraint=FINER)
242 p = mdb.models['Model-1'].parts['workpiece']
243 e = p.edges
244 pickedEdges = e.getSequenceFromMask(mask=('[#2890a ]', ), )
245 #p.seedEdgeByNumber(edges=pickedEdges, number=int(workpieceDepth/sizeOfCutting), constraint=FINER)
246 p.seedEdgeByNumber(edges=pickedEdges, number=20, constraint=FINER)
247 p = mdb.models['Model-1'].parts['workpiece']
248 p = mdb.models['Model-1'].parts['workpiece']
249 e = p.edges
250 pickedEdges = e.getSequenceFromMask(mask=('[#14280 ]', ), )
251 #p.seedEdgeByNumber(edges=pickedEdges, number=int(cutDepth*2/sizeOfCutting)*2, constraint=FINER)
252 p.seedEdgeByNumber(edges=pickedEdges, number=10, constraint=FINER)
253 p = mdb.models['Model-1'].parts['workpiece']
254 e = p.edges
255 pickedEdges = e.getSequenceFromMask(mask=('[#1450 ]', ), )
256 p.seedEdgeByNumber(edges=pickedEdges, number=numOfNoneCutting, constraint=FINER)
257
258 # assign mesh type
259 elemType1 = mesh.ElemType(elemCode=C3D8T, elemLibrary=EXPLICIT,
260 secondOrderAccuracy=OFF, distortionControl=DEFAULT, elemDeletion=ON)
261 elemType2 = mesh.ElemType(elemCode=C3D6T, elemLibrary=EXPLICIT)
262 elemType3 = mesh.ElemType(elemCode=C3D4T, elemLibrary=EXPLICIT)
263 p = mdb.models['Model-1'].parts['workpiece']
264 c = p.cells
265 cells = c.getSequenceFromMask(mask=('[#3 ]', ), )
266 pickedRegions =(cells, )
267 p.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2,
268 elemType3))
269 p = mdb.models['Model-1'].parts['workpiece']
270 p.generateMesh()
271
272 # creat mesh part
273 p = mdb.models['Model-1'].parts['workpiece']
274 p.PartFromMesh(name='workpiece-mesh-1', copySets=True)
275
276
277 # the size of the mesh cutter
278 sizeOfCutter = 0.01
279 # mesh the cutter
280 p = mdb.models['Model-1'].parts['cutter']
281 p.seedPart(size=sizeOfCutter, deviationFactor=0.1, minSizeFactor=0.1)
282 p = mdb.models['Model-1'].parts['cutter']
283 p.generateMesh()
284
285
286 # assemble the parts
287 # first assemble the workpiece
288 a = mdb.models['Model-1'].rootAssembly
289 a.DatumCsysByDefault(CARTESIAN)
290 p = mdb.models['Model-1'].parts['workpiece-mesh-1']
291 a.Instance(name='workpiece-mesh-1-1', part=p, dependent=ON)
292 a = mdb.models['Model-1'].rootAssembly
293 a.translate(instanceList=('workpiece-mesh-1-1', ), vector=(-workpiecePointPosX, -workpiecePointPosY, -workpieceDepth/2))
294
295 # input the inclination angle that you want to change
296 inclinationAngle = 45
297
298 # second assemble the cutter
299 a = mdb.models['Model-1'].rootAssembly
300 p = mdb.models['Model-1'].parts['cutter']
301 a.Instance(name='cutter-1', part=p, dependent=ON)
302 a = mdb.models['Model-1'].rootAssembly
303 a.rotate(instanceList=('cutter-1', ), axisPoint=(cutterPointPos, cutterPointPos, 0.0),
304 axisDirection=(0.0, -cutterPointPos, 0.0), angle=90.0)
305 a = mdb.models['Model-1'].rootAssembly
306 a.translate(instanceList=('cutter-1', ), vector=(cutterPointPos, cutterPointPos, cutterPointPos))
307 a = mdb.models['Model-1'].rootAssembly # move the workpiece to the cutting depth
308 a.translate(instanceList=('cutter-1', ), vector=(0.0, -cutDepth, 0.0))
309 a = mdb.models['Model-1'].rootAssembly # rotate the cutter to the inclination angle
310 a.rotate(instanceList=('cutter-1', ), axisPoint=(0.0, -0.0, 0.0),
311 axisDirection=(0.0, -0.1, 0.0), angle=inclinationAngle)
312 a = mdb.models['Model-1'].rootAssembly # move the rutter to the safe region
313 a.translate(instanceList=('cutter-1', ), vector=(tan(inclinationAngle*pi/180)*workpieceDepth/2 + 0.005, 0.0, 0.0))
314
315
316 # cutting speed
317 cuttingSpeed = 314.2
318 cuttingTime = workpieceLength/cuttingSpeed
319
320 # set the step
321 mdb.models['Model-1'].ExplicitDynamicsStep(name='cutting', previous='Initial',
322 description='cutting the workpiece', timePeriod=cuttingTime, adiabatic=ON)
323
324 # set the field output
325 mdb.models['Model-1'].fieldOutputRequests['F-Output-1'].setValues(variables=(
326 'S', 'SVAVG', 'PE', 'PEVAVG', 'PEEQ', 'PEEQVAVG', 'LE', 'U', 'V', 'A',
327 'RF', 'CSTRESS', 'EVF', 'STATUS'), numIntervals=500)
328
329 # set the history output
330 regionDef=mdb.models['Model-1'].rootAssembly.allInstances['cutter-1'].sets['cutter']
331 mdb.models['Model-1'].historyOutputRequests['H-Output-1'].setValues(variables=(
332 'RF1', 'RF2', 'RF3', 'ALLAE', 'ALLCD', 'ALLDMD', 'ALLFD', 'ALLIE', 'ALLKE',
333 'ALLPD', 'ALLSE', 'ALLVD', 'ALLWK', 'ETOTAL'), region=regionDef,
334 sectionPoints=DEFAULT, rebar=EXCLUDE, numIntervals=500)
335
336
337 # set the interface nodes
338 a = mdb.models['Model-1'].rootAssembly
339 n = a.instances['workpiece-mesh-1-1'].nodes
340 nodes = n.getByBoundingBox(xMin=-workpieceLength, xMax=0, yMin=-2*cutDepth,yMax=0,zMin=-workpieceDepth/2,zMax=workpieceDepth/2)
341 a.Set(name = 'interface', nodes = nodes)
342
343 # set the interation properties
344 mdb.models['Model-1'].ContactProperty('IntProp-1')
345 mdb.models['Model-1'].interactionProperties['IntProp-1'].TangentialBehavior(
346 formulation=PENALTY, directionality=ISOTROPIC, slipRateDependency=OFF,
347 pressureDependency=OFF, temperatureDependency=OFF, dependencies=0, table=((
348 0.3, ), ), shearStressLimit=None, maximumElasticSlip=FRACTION,
349 fraction=0.005, elasticSlipStiffness=None)
350 mdb.models['Model-1'].interactionProperties['IntProp-1'].NormalBehavior(
351 pressureOverclosure=HARD, allowSeparation=ON,
352 constraintEnforcementMethod=DEFAULT)
353 mdb.models['Model-1'].interactionProperties['IntProp-1'].HeatGeneration(
354 conversionFraction=1.0, slaveFraction=0.5)
355
356 # set the interaction of cutter and workpiece
357 a4 = mdb.models['Model-1'].rootAssembly
358 s1 = a4.instances['cutter-1'].faces
359 side1Faces1 = s1.getSequenceFromMask(mask=('[#6 ]', ), )
360 side2Faces1 = s1.getSequenceFromMask(mask=('[#39 ]', ), )
361 region1=regionToolset.Region(side1Faces=side1Faces1, side2Faces=side2Faces1)
362 a4 = mdb.models['Model-1'].rootAssembly
363 region2=a4.sets['interface']
364 mdb.models['Model-1'].SurfaceToSurfaceContactExp(name ='Int-1',
365 createStepName='cutting', master = region1, slave = region2,
366 mechanicalConstraint=KINEMATIC, sliding=FINITE,
367 interactionProperty='IntProp-1', initialClearance=OMIT, datumAxis=None,
368 clearanceRegion=None)
369
370 # set the boundary of no movement
371 a4 = mdb.models['Model-1'].rootAssembly
372 n1 = a4.instances['workpiece-mesh-1-1'].nodes
373 nodes = n1.getByBoundingBox(xMin=-workpieceLength, xMax=0, yMin=-workpieceHeight-0.01,yMax=-workpieceHeight+0.01,zMin=-workpieceDepth/2,zMax=workpieceDepth/2)
374 a4.Set(nodes=nodes, name='noMovement')
375
376
377 # set the no movement boundary
378 a5 = mdb.models['Model-1'].rootAssembly
379 region = a5.sets['noMovement']
380 mdb.models['Model-1'].EncastreBC(name='BC-1', createStepName='Initial',
381 region=region, localCsys=None)
382
383
384 # set the cutter boundary
385 a5 = mdb.models['Model-1'].rootAssembly
386 region = a5.instances['cutter-1'].sets['cutter']
387 mdb.models['Model-1'].VelocityBC(name='BC-2', createStepName='cutting',
388 region=region, v1=-cuttingSpeed, v2=0.0, v3=UNSET, vr1=0.0, vr2=0.0, vr3=0.0,
389 amplitude=UNSET, localCsys=None, distributionType=UNIFORM, fieldName='')
390
391 # input the ultrasonic parameters
392 ultrasonicFre = 31000.0
393 frequency = 2*pi*ultrasonicFre
394 ultrasonicAmp = 0.003
395 Adata = ultrasonicAmp*frequency
396
397
398 # set the amplitude boundary
399 mdb.models['Model-1'].PeriodicAmplitude(name='Amp-1', timeSpan=STEP,
400 frequency=frequency, start=0.0, a_0=0.0, data=((Adata, 0.0), ))
401 a7 = mdb.models['Model-1'].rootAssembly
402 region = a7.instances['cutter-1'].sets['cutter']
403 mdb.models['Model-1'].VelocityBC(name='BC-3', createStepName='cutting',
404 region=region, v1=UNSET, v2=UNSET, v3=1.0, vr1=UNSET, vr2=UNSET, vr3=UNSET,
405 amplitude='Amp-1', localCsys=None, distributionType=UNIFORM, fieldName='')
406
407 # set the all workpiece
408 a5 = mdb.models['Model-1'].rootAssembly
409 n1 = a5.instances['workpiece-mesh-1-1'].nodes
410 nodes = n1.getByBoundingBox(xMin=-workpieceLength, xMax=0, yMin=-workpieceHeight-0.01,yMax=0.01,zMin=-workpieceDepth/2,zMax=workpieceDepth/2)
411 a4.Set(nodes=nodes, name='allWorkpiece')
412
413 # define the initial workpiece temperature
414 a6 = mdb.models['Model-1'].rootAssembly
415 region = a6.sets['allWorkpiece']
416 mdb.models['Model-1'].Temperature(name='Predefined Field-1',
417 createStepName='Initial', region=region, distributionType=UNIFORM,
418 crossSectionDistribution=CONSTANT_THROUGH_THICKNESS, magnitudes=(20.0, ))