# ?*? coding: cp1252 ?*? ####################################### ### Import-Anweisungen fuer ABAQUS ### ####################################### from abaqus import * from abaqusConstants import * 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 import odbAccess import math import fractions import os ###################### ### PARAMETER-Wahl ### ###################### # t_Sch = Schichtdicke # E_Su = E-Modul Substrat # R_eSu = Fliessgrenze Substrat # E_Sch = E-Modul Schicht # index: 0 1 2 3 t_Sch = [0.0028, 0.005] E_Su = [4300.] R_eSu = [90.] E_Sch = [40000., 60000., 80000., 100000.] ######################## ### PARAMETER-Studie ### ######################## #ParameterStudie = [] #################################### ### Funktionen des Modellaufbaus ### #################################### def Arbeitsverzeichnis(): os.chdir(r'Z:\Desktop\Bachelorarbeit\Abaqus\Ergebnisse\04') def Modell(VNr): mdb.Model(name='Scratchtest0,4_' + str(VNr+1), modelType=STANDARD_EXPLICIT) def Part_Indenter(VNr): s = mdb.models['Scratchtest0,4_' + str(VNr+1)].ConstrainedSketch(name='__profile__', sheetSize=1.0) g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=STANDALONE) s.ConstructionLine(point1=(0.0, -0.5), point2=(0.0, 0.5)) s.FixedConstraint(entity=g[2]) s.Line(point1=(0.0, 0.0), point2=(0.0, 0.2)) s.VerticalConstraint(entity=g[3], addUndoState=False) s.Line(point1=(0.0, 0.2), point2=(0.4, 0.2)) s.HorizontalConstraint(entity=g[4], addUndoState=False) s.PerpendicularConstraint(entity1=g[3], entity2=g[4], addUndoState=False) s.FixedConstraint(entity=v[0]) s.FixedConstraint(entity=v[1]) s.FixedConstraint(entity=v[2]) s.ArcByCenterEnds(center=(0.0, 0.2), point1=(0.0, 0.0), point2=(0.085, 0.005), direction=COUNTERCLOCKWISE) s.Line(point1=(0.0799170841027856, 0.0166608070583153), point2=(0.4, 0.2)) s.TangentConstraint(entity1=g[6], entity2=g[5]) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].Part(name='Indenter', dimensionality=THREE_D, type=DEFORMABLE_BODY) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] p.BaseSolidRevolve(sketch=s, angle=180.0, flipRevolveDirection=ON) s.unsetPrimaryObject() p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] del mdb.models['Scratchtest0,4_' + str(VNr+1)].sketches['__profile__'] p.DatumPlaneByPrincipalPlane(principalPlane=YZPLANE, offset=0.0) f1, e1, d1 = p.faces, p.edges, p.datums t = p.MakeSketchTransform(sketchPlane=f1[4], sketchUpEdge=d1[1], sketchPlaneSide=SIDE1, sketchOrientation=LEFT, origin=(0.135898, 0.126111, 0.0)) s1 = mdb.models['Scratchtest0,4_' + str(VNr+1)].ConstrainedSketch(name='__profile__', sheetSize=0.89, gridSpacing=0.02, transform=t) g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints s1.setPrimaryObject(option=SUPERIMPOSE) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] p.projectReferencesOntoSketch(sketch=s1, filter=COPLANAR_EDGES) s1.Line(point1=(-0.035898, -0.0993160807568878), point2=(-0.13589800004752, -0.0993160807568878)) s1.HorizontalConstraint(entity=g[10], addUndoState=False) s1.CoincidentConstraint(entity1=v[6], entity2=g[6], addUndoState=False) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] f = p.faces pickedFaces = f.getSequenceFromMask(mask=('[#10 ]', ), ) e, d2 = p.edges, p.datums p.PartitionFaceBySketch(sketchUpEdge=d2[1], faces=pickedFaces, sketchOrientation=LEFT, sketch=s1) s1.unsetPrimaryObject() del mdb.models['Scratchtest0,4_' + str(VNr+1)].sketches['__profile__'] p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] c = p.cells pickedCells = c.getSequenceFromMask(mask=('[#1 ]', ), ) e1 = p.edges pickedEdges =(e1[0], ) p.PartitionCellBySweepEdge(sweepPath=e1[5], cells=pickedCells, edges=pickedEdges) c = p.cells pickedCells = c.getSequenceFromMask(mask=('[#3 ]', ), ) p.PartitionCellByDatumPlane(datumPlane=mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'].datums[2], cells=pickedCells) def Part_Schicht_Substrat(t_Sch, VNr): s = mdb.models['Scratchtest0,4_' + str(VNr+1)].ConstrainedSketch(name='__profile__', sheetSize=10.0) g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=STANDALONE) s.rectangle(point1=(0.0, 0.0), point2=(3.0, -1.0)) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].Part(name='Schicht_Substrat', dimensionality=THREE_D, type=DEFORMABLE_BODY) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'] p.BaseSolidExtrude(sketch=s, depth=1.0) s.unsetPrimaryObject() p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'] del mdb.models['Scratchtest0,4_' + str(VNr+1)].sketches['__profile__'] f = p.faces p.DatumPlaneByOffset(plane=f[3], flip=SIDE2, offset=t_Sch) c = p.cells pickedCells = c.getSequenceFromMask(mask=('[#1 ]', ), ) p.PartitionCellByDatumPlane(datumPlane=mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'].datums[2], cells=pickedCells) def Material(E_Su, E_Sch, R_eSu, VNr): #Susbtrat-Werkstoff mdb.models['Scratchtest0,4_' + str(VNr+1)].Material(name='ASA') mdb.models['Scratchtest0,4_' + str(VNr+1)].materials['ASA'].Elastic(table=((E_Su, 0.35), )) mdb.models['Scratchtest0,4_' + str(VNr+1)].materials['ASA'].Plastic(table=((R_eSu, 0.0), )) #Beschichtungs-Werkstoff mdb.models['Scratchtest0,4_' + str(VNr+1)].Material(name='CrN') mdb.models['Scratchtest0,4_' + str(VNr+1)].materials['CrN'].Elastic(table=((E_Sch, 0.3), )) #Indenter-Werkstoff mdb.models['Scratchtest0,4_' + str(VNr+1)].Material(name='Diamant') mdb.models['Scratchtest0,4_' + str(VNr+1)].materials['Diamant'].Elastic(table=((1000000.0, 0.3), )) def Section(VNr): mdb.models['Scratchtest0,4_' + str(VNr+1)].HomogeneousSolidSection(name='Indenter', material='Diamant', thickness=None) mdb.models['Scratchtest0,4_' + str(VNr+1)].HomogeneousSolidSection(name='Schicht', material='CrN', thickness=None) mdb.models['Scratchtest0,4_' + str(VNr+1)].HomogeneousSolidSection(name='Susbtrat', material='ASA', thickness=None) def SectionAssignment(VNr): #Diamant -> Indenter p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] c = p.cells cells = c.getSequenceFromMask(mask=('[#f ]', ), ) region = regionToolset.Region(cells=cells) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] p.SectionAssignment(region=region, sectionName='Indenter', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION) #CrN -> Schicht p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'] c = p.cells cells = c.getSequenceFromMask(mask=('[#1 ]', ), ) region = regionToolset.Region(cells=cells) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'] p.SectionAssignment(region=region, sectionName='Schicht', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION) #ASA -> Substrat p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'] c = p.cells cells = c.getSequenceFromMask(mask=('[#2 ]', ), ) region = regionToolset.Region(cells=cells) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'] p.SectionAssignment(region=region, sectionName='Susbtrat', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION) def Assembly(VNr): #Instance Substrat_Schicht a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly a.DatumCsysByDefault(CARTESIAN) p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Schicht_Substrat'] a.Instance(name='Schicht_Substrat-1', part=p, dependent=OFF) #Instance Indenter p = mdb.models['Scratchtest0,4_' + str(VNr+1)].parts['Indenter'] a.Instance(name='Indenter-1', part=p, dependent=OFF) #Translate Indenter a.translate(instanceList=('Indenter-1', ), vector=(0.5, 0.0, 1.0)) #Koordinatensystem loeschen del a.features['Datum csys-1'] #neues Koordinatensystem mit Ursprung unten an der Kugel v1 = a.instances['Indenter-1'].vertices a.DatumCsysByThreePoints(origin=v1[2], name='Datum csys-1', coordSysType=CARTESIAN, line1=(1.0, 0.0, 0.0), line2=(0.0, 1.0, 0.0)) def Steps(VNr): #Step1: Anheben mdb.models['Scratchtest0,4_' + str(VNr+1)].StaticStep(name='Anheben', previous='Initial', timePeriod=0.1, maxNumInc=20, initialInc=0.01, minInc=0.0001, maxInc=0.05, nlgeom=ON) #Step2: Zureuckfahren mdb.models['Scratchtest0,4_' + str(VNr+1)].StaticStep(name='Zurueckfahren', previous='Anheben', timePeriod=0.1, maxNumInc=20, initialInc=0.01, minInc=0.0001, maxInc=0.05) #Step3: Eindruecken mdb.models['Scratchtest0,4_' + str(VNr+1)].StaticStep(name='Eindruecken', previous='Zurueckfahren', maxNumInc=100000, stabilizationMagnitude=0.0002, stabilizationMethod=DAMPING_FACTOR, continueDampingFactors=False, adaptiveDampingRatio=None, initialInc=1e-05, minInc=1e-10, maxInc=0.5) #Step4: Verfahren mdb.models['Scratchtest0,4_' + str(VNr+1)].StaticStep(name='Verfahren', previous='Eindruecken', timePeriod=10.0, maxNumInc=1000000, stabilizationMagnitude=0.0002, stabilizationMethod=DAMPING_FACTOR, continueDampingFactors=False, adaptiveDampingRatio=None, initialInc=1e-05, minInc=1e-10, maxInc=0.5) #Step5: Entlasten mdb.models['Scratchtest0,4_' + str(VNr+1)].StaticStep(name='Entlasten', previous='Verfahren', timePeriod=0.1, maxNumInc=20, stabilizationMagnitude=0.0002, stabilizationMethod=DAMPING_FACTOR, continueDampingFactors=False, adaptiveDampingRatio=None, initialInc=0.01, minInc=1e-06, maxInc=0.01) def Output(VNr): #aendern der Output-Schritte in Step4(Verfahren) mdb.models['Scratchtest0,4_' + str(VNr+1)].fieldOutputRequests['F-Output-1'].setValuesInStep( stepName='Verfahren', timeInterval=0.1, timeMarks=OFF) #aendern der Outputschritte in Step5(Entlasten) mdb.models['Scratchtest0,4_' + str(VNr+1)].fieldOutputRequests['F-Output-1'].setValuesInStep( stepName='Entlasten', frequency=1) def InteractionProperty(VNr): mdb.models['Scratchtest0,4_' + str(VNr+1)].ContactProperty('IntProp-1') mdb.models['Scratchtest0,4_' + str(VNr+1)].interactionProperties['IntProp-1'].TangentialBehavior( formulation=PENALTY, directionality=ISOTROPIC, slipRateDependency=OFF, pressureDependency=OFF, temperatureDependency=OFF, dependencies=0, table=((0.093, ), ), shearStressLimit=None, maximumElasticSlip=FRACTION, fraction=0.005, elasticSlipStiffness=None) mdb.models['Scratchtest0,4_' + str(VNr+1)].interactionProperties['IntProp-1'].NormalBehavior( pressureOverclosure=HARD, allowSeparation=ON, constraintEnforcementMethod=DEFAULT) def Interaction(VNr): a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly s1 = a.instances['Indenter-1'].faces side1Faces1 = s1.getSequenceFromMask(mask=('[#a18 ]', ), ) region1=regionToolset.Region(side1Faces=side1Faces1) # a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly s1 = a.instances['Schicht_Substrat-1'].faces side1Faces1 = s1.getSequenceFromMask(mask=('[#100 ]', ), ) region2=regionToolset.Region(side1Faces=side1Faces1) mdb.models['Scratchtest0,4_' + str(VNr+1)].SurfaceToSurfaceContactStd(name='Int-1', createStepName='Zurueckfahren', master=region1, slave=region2, sliding=FINITE, thickness=ON, interactionProperty='IntProp-1', surfaceSmoothing=AUTOMATIC, adjustMethod=NONE, initialClearance=OMIT, datumAxis=None, clearanceRegion=None) def Load(VNr): #Load1 a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly s1 = a.instances['Indenter-1'].faces side1Faces1 = s1.getSequenceFromMask(mask=('[#404 ]', ), ) region = regionToolset.Region(side1Faces=side1Faces1) mdb.models['Scratchtest0,4_' + str(VNr+1)].Pressure(name='Load-1', createStepName='Eindruecken', region=region, distributionType=UNIFORM, field='', magnitude=9.94, amplitude=UNSET) #deaktivieren von Load1 mdb.models['Scratchtest0,4_' + str(VNr+1)].loads['Load-1'].deactivate('Verfahren') #Load2 a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly s1 = a.instances['Indenter-1'].faces side1Faces1 = s1.getSequenceFromMask(mask=('[#404 ]', ), ) region = regionToolset.Region(side1Faces=side1Faces1) mdb.models['Scratchtest0,4_' + str(VNr+1)].Pressure(name='Load-2', createStepName='Verfahren', region=region, distributionType=UNIFORM, field='', magnitude=50.0, amplitude=UNSET) #deaktivieren von Load2 mdb.models['Scratchtest0,4_' + str(VNr+1)].loads['Load-2'].deactivate('Entlasten') def BC(VNr): #BC1: Befestigung a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly f1 = a.instances['Schicht_Substrat-1'].faces faces1 = f1.getSequenceFromMask(mask=('[#40 ]', ), ) region = regionToolset.Region(faces=faces1) mdb.models['Scratchtest0,4_' + str(VNr+1)].EncastreBC(name='Befestigung', createStepName='Initial', region=region, localCsys=None) #BC2: Indenter a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly f1 = a.instances['Indenter-1'].faces faces1 = f1.getSequenceFromMask(mask=('[#3180 ]', ), ) region = regionToolset.Region(faces=faces1) mdb.models['Scratchtest0,4_' + str(VNr+1)].DisplacementBC(name='Indenter', createStepName='Anheben', region=region, u1=0.0, u2=0.1, u3=0.0, ur1=UNSET, ur2=UNSET, ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None) #aendern von BC2 in den einzelnen Steps mdb.models['Scratchtest0,4_' + str(VNr+1)].boundaryConditions['Indenter'].setValuesInStep( stepName='Zurueckfahren', u2=0.0) mdb.models['Scratchtest0,4_' + str(VNr+1)].boundaryConditions['Indenter'].setValuesInStep( stepName='Eindruecken', u2=FREED, ur3=0.0) mdb.models['Scratchtest0,4_' + str(VNr+1)].boundaryConditions['Indenter'].setValuesInStep( stepName='Verfahren', u1=2.0) mdb.models['Scratchtest0,4_' + str(VNr+1)].boundaryConditions['Indenter'].setValuesInStep( stepName='Entlasten', u2=0.0) #BC3: Schicht_Substrat a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly f1 = a.instances['Schicht_Substrat-1'].faces faces1 = f1.getSequenceFromMask(mask=('[#208 ]', ), ) region = regionToolset.Region(faces=faces1) mdb.models['Scratchtest0,4_' + str(VNr+1)].DisplacementBC(name='Schicht_Substrat', createStepName='Anheben', region=region, u1=UNSET, u2=UNSET, u3=0.0, ur1=UNSET, ur2=UNSET, ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None) def Mesh_Indenter(VNr): #Mesh-Control: Tet/Free a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly c1 = a.instances['Indenter-1'].cells pickedRegions = c1.getSequenceFromMask(mask=('[#f ]', ), ) a.setMeshControls(regions=pickedRegions, elemShape=TET, technique=FREE) elemType1 = mesh.ElemType(elemCode=C3D20R) elemType2 = mesh.ElemType(elemCode=C3D15) elemType3 = mesh.ElemType(elemCode=C3D10) c1 = a.instances['Indenter-1'].cells cells = c1.getSequenceFromMask(mask=('[#f ]', ), ) pickedRegions =(cells, ) a.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2, elemType3)) #Seeding a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly e1 = a.instances['Indenter-1'].edges pickedEdges1 = e1.getSequenceFromMask(mask=('[#20 ]', ), ) a.seedEdgeByBias(biasMethod=SINGLE, end1Edges=pickedEdges1, ratio=5.0, number=8, constraint=FINER) pickedEdges1 = e1.getSequenceFromMask(mask=('[#2 ]', ), ) a.seedEdgeByBias(biasMethod=SINGLE, end1Edges=pickedEdges1, ratio=2.0, number=4, constraint=FINER) pickedEdges1 = e1.getSequenceFromMask(mask=('[#20004 ]', ), ) pickedEdges2 = e1.getSequenceFromMask(mask=('[#800 ]', ), ) a.seedEdgeByBias(biasMethod=SINGLE, end1Edges=pickedEdges1, end2Edges=pickedEdges2, ratio=2.0, number=10, constraint=FINER) pickedEdges1 = e1.getSequenceFromMask(mask=('[#4208 ]', ), ) a.seedEdgeByBias(biasMethod=SINGLE, end1Edges=pickedEdges1, ratio=5.0, number=10, constraint=FINER) pickedEdges1 = e1.getSequenceFromMask(mask=('[#800 ]', ), ) a.seedEdgeByBias(biasMethod=SINGLE, end1Edges=pickedEdges1, ratio=2.0, number=10, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#8090 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=6, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#10040 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=9, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#500 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=10, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#3001 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=7, constraint=FINER) #Meshing partInstances =(a.instances['Indenter-1'], ) a.generateMesh(regions=partInstances) def Mesh_Schicht_Substrat(VNr): #Seeding a = mdb.models['Scratchtest0,4_' + str(VNr+1)].rootAssembly e1 = a.instances['Schicht_Substrat-1'].edges pickedEdges = e1.getSequenceFromMask(mask=('[#a082a ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=250, constraint=FINER) pickedEdges1 = e1.getSequenceFromMask(mask=('[#4 ]', ), ) pickedEdges2 = e1.getSequenceFromMask(mask=('[#16101 ]', ), ) a.seedEdgeByBias(biasMethod=SINGLE, end1Edges=pickedEdges1, end2Edges=pickedEdges2, ratio=40.0, number=17, constraint=FINER) pickedEdges1 = e1.getSequenceFromMask(mask=('[#40080 ]', ), ) pickedEdges2 = e1.getSequenceFromMask(mask=('[#600 ]', ), ) a.seedEdgeByBias(biasMethod=SINGLE, end1Edges=pickedEdges1, end2Edges=pickedEdges2, ratio=40.0, number=17, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#1000 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=2, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#8000 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=2, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#40 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=2, constraint=FINER) pickedEdges = e1.getSequenceFromMask(mask=('[#10 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=2, constraint=FINER) #Meshing partInstances =(a.instances['Schicht_Substrat-1'], ) a.generateMesh(regions=partInstances) def Job_Erstellung(VNr): mdb.Job(name='Ritztest0,4_' + str(VNr+1), model='Scratchtest0,4_' + str(VNr+1), description='', type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='', scratch='', multiprocessingMode=DEFAULT, numCpus=4, numDomains=4) def Job_Start(VNr): mdb.jobs['Ritztest0,4_' + str(VNr+1)].submit( consistencyChecking=OFF) def Warten(VNr): mdb.jobs['Ritztest0,4_' + str(VNr+1)].waitForCompletion() Arbeitsverzeichnis() VNr = 0 while VNr <= 1: Modell(VNr) Part_Indenter(VNr) Part_Schicht_Substrat(t_Sch[0], VNr) Material(E_Su[0], E_Sch[3-VNr], R_eSu[0], VNr) Section(VNr) SectionAssignment(VNr) Assembly(VNr) Steps(VNr) Output(VNr) InteractionProperty(VNr) Interaction(VNr) Load(VNr) BC(VNr) Mesh_Indenter(VNr) Mesh_Schicht_Substrat(VNr) Job_Erstellung(VNr) Job_Start(VNr) Warten(VNr) VNr = VNr + 1 Save()