Closed qmrphd closed 3 years ago
from abaqus import from abaqusConstants import from caeModules import * from driverUtils import executeOnCaeStartup
import section import regionToolset import displayGroupMdbToolset as dgm import part import material import assembly import step import interaction import load import mesh import job import sketch import visualization import xyPlot import displayGroupOdbToolset as dgo import connectorBehavior
cliCommand("""session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE)""") backwardCompatibility.setValues(includeDeprecated=True, reportDeprecated=False)
myModel = mdb.Model(name='multilayer_model_2021-04-27') indenter_used = 'Berko_Example' h_ind = 0.100000 r_ind = 0.241421 a_ind = 45 sheet_Size = 9000.000000 step_Load = 'Loading' ind_h = -200.000000
s = myModel.ConstrainedSketch(name='profile', sheetSize=sheet_Size) g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.sketchOptions.setValues(viewStyle=AXISYM) s.setPrimaryObject(option=STANDALONE) s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0)) s.FixedConstraint(entity=g[2]) s.ArcByCenterEnds(center=(0.0, r_ind), point1=(0.170711 , 0.070711), point2=(0.0, 0.0),direction=CLOCKWISE) s.Line(point1=(0.170711 , 0.070711), point2=(3182.151226 , 3182.051226)) s.TangentConstraint(entity1=g[3], entity2=g[4]) p = myModel.Part(name=indenter_used, dimensionality=AXISYMMETRIC, type=ANALYTIC_RIGID_SURFACE) p = myModel.parts[indenter_used] p.AnalyticRigidSurf2DPlanar(sketch=s) s.unsetPrimaryObject() p = myModel.parts[indenter_used] session.viewports['Viewport: 1'].setValues(displayedObject=p) del myModel.sketches['profile'] p = myModel.parts[indenter_used] v1, e, d1, n = p.vertices, p.edges, p.datums, p.nodes p.ReferencePoint(point=v1.findAt(coordinates=(0.0, 0.0, 0.0)))
s = myModel.ConstrainedSketch(name='profile', sheetSize=sheet_Size) g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.sketchOptions.setValues(viewStyle=AXISYM) s.setPrimaryObject(option=STANDALONE) s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0)) s.FixedConstraint(entity=g[2]) s.rectangle(point1=(0.0, 0.000000), point2=(9000.000000, -500.000000)) s.CoincidentConstraint(entity1=v[0], entity2=g[2], addUndoState=False) p = myModel.Part(name='Film_3', dimensionality=AXISYMMETRIC, type=DEFORMABLE_BODY) p = myModel.parts['Film_3'] p.BaseShell(sketch=s) s.unsetPrimaryObject() p = myModel.parts['Film_3'] s = p.edges side1Edges = s.findAt(((4500.000000, 0.000000, 0.0), )) p.Surface(side1Edges=side1Edges, name='Surf-Top') side1Edges = s.findAt(((4500.000000, -500.000000, 0.0), )) p.Surface(side1Edges=side1Edges, name='Surf-Bottom') a = myModel.rootAssembly a.regenerate() s = myModel.ConstrainedSketch(name='profile', sheetSize=sheet_Size) g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.sketchOptions.setValues(viewStyle=AXISYM) s.setPrimaryObject(option=STANDALONE) s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0)) s.FixedConstraint(entity=g[2]) s.rectangle(point1=(0.0, -500.000000), point2=(9000.000000, -700.000000)) s.CoincidentConstraint(entity1=v[0], entity2=g[2], addUndoState=False) p = myModel.Part(name='Film_2', dimensionality=AXISYMMETRIC, type=DEFORMABLE_BODY) p = myModel.parts['Film_2'] p.BaseShell(sketch=s) s.unsetPrimaryObject() p = myModel.parts['Film_2'] s = p.edges side1Edges = s.findAt(((4500.000000, -500.000000, 0.0), )) p.Surface(side1Edges=side1Edges, name='Surf-Top') side1Edges = s.findAt(((4500.000000, -700.000000, 0.0), )) p.Surface(side1Edges=side1Edges, name='Surf-Bottom') a = myModel.rootAssembly a.regenerate() s = myModel.ConstrainedSketch(name='profile', sheetSize=sheet_Size) g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.sketchOptions.setValues(viewStyle=AXISYM) s.setPrimaryObject(option=STANDALONE) s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0)) s.FixedConstraint(entity=g[2]) s.rectangle(point1=(0.0, -700.000000), point2=(9000.000000, -2200.000000)) s.CoincidentConstraint(entity1=v[0], entity2=g[2], addUndoState=False) p = myModel.Part(name='Film_1', dimensionality=AXISYMMETRIC, type=DEFORMABLE_BODY) p = myModel.parts['Film_1'] p.BaseShell(sketch=s) s.unsetPrimaryObject() p = myModel.parts['Film_1'] s = p.edges side1Edges = s.findAt(((4500.000000, -700.000000, 0.0), )) p.Surface(side1Edges=side1Edges, name='Surf-Top') side1Edges = s.findAt(((4500.000000, -2200.000000, 0.0), )) p.Surface(side1Edges=side1Edges, name='Surf-Bottom') a = myModel.rootAssembly a.regenerate()
myModel.Material(name='Diamond') myModel.materials['Diamond'].Density(table=((1.0, ), )) myModel.materials['Diamond'].Elastic(temperatureDependency=False,table=((1070.000000, 0.070000), )) myModel.Material(name='Material_1') myModel.materials['Material_1'].Density(table=((1.0, ), )) myModel.materials['Material_1'].Elastic(temperatureDependency=False,table=((211.000000, 0.300000), )) myModel.Material(name='Material_2') myModel.materials['Material_2'].Density(table=((1.0, ), )) myModel.materials['Material_2'].Elastic(temperatureDependency=False,table=((211.000000, 0.300000), )) myModel.Material(name='Material_3') myModel.materials['Material_3'].Density(table=((1.0, ), )) myModel.materials['Material_3'].Elastic(temperatureDependency=False,table=((211.000000, 0.300000), ))
mySection = myModel.HomogeneousSolidSection(name='Section_indenter',material='Diamond') mySection = myModel.HomogeneousSolidSection(name='Section_material_1',material='Material_1') mySection = myModel.HomogeneousSolidSection(name='Section_material_2',material='Material_2') mySection = myModel.HomogeneousSolidSection(name='Section_material_3',material='Material_3') myModel.rootAssembly.regenerate() p = myModel.parts['Film_3'] session.viewports['Viewport: 1'].setValues(displayedObject=p) p = myModel.parts['Film_3'] f = p.faces faces = f.findAt(((4500.000000, -250.000000, 0.0), )) region = p.Set(faces=faces, name='Set_1') p = myModel.parts['Film_3'] p.SectionAssignment(region=region, sectionName='Section_material_3', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION) p = myModel.parts['Film_2'] session.viewports['Viewport: 1'].setValues(displayedObject=p) p = myModel.parts['Film_2'] f = p.faces faces = f.findAt(((4500.000000, -600.000000, 0.0), )) region = p.Set(faces=faces, name='Set_1') p = myModel.parts['Film_2'] p.SectionAssignment(region=region, sectionName='Section_material_2', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION) p = myModel.parts['Film_1'] session.viewports['Viewport: 1'].setValues(displayedObject=p) p = myModel.parts['Film_1'] f = p.faces faces = f.findAt(((4500.000000, -1450.000000, 0.0), )) region = p.Set(faces=faces, name='Set_1') p = myModel.parts['Film_1'] p.SectionAssignment(region=region, sectionName='Section_material_1', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION)
myAssembly = myModel.rootAssembly p = myModel.parts['Film_1'] myAssembly.Instance(name='Film_1', part=p, dependent=OFF) myAssembly = myModel.rootAssembly p = myModel.parts['Film_2'] myAssembly.Instance(name='Film_2', part=p, dependent=OFF) myAssembly = myModel.rootAssembly p = myModel.parts['Film_3'] myAssembly.Instance(name='Film_3', part=p, dependent=OFF) myAssembly = myModel.rootAssembly p = myModel.parts[indenter_used] myAssembly.Instance(name=indenter_used, part=p, dependent=OFF) myAssembly = myModel.rootAssembly myAssembly.regenerate()
session.viewports['Viewport: 1'].setValues(displayedObject=myAssembly) session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Initial') myModel.StaticStep(name=step_Load, previous='Initial', description='Indentation step', maxNumInc=100000, initialInc=0.0001, minInc=1e-30, maxInc=0.02) myModel.steps[step_Load].setValues(nlgeom=ON) session.viewports['Viewport: 1'].assemblyDisplay.setValues(step=step_Load)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(mesh=ON) session.viewports['Viewport: 1'].assemblyDisplay.meshOptions.setValues(meshTechnique=ON) a = myModel.rootAssembly e1 = a.instances['Film_3'].edges pickedEdges = e1.findAt(((0.0, -250.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(50.000000), constraint=FINER) pickedEdges = e1.findAt(((9000.000000, -250.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(50.000000), constraint=FINER) pickedEdges = e1.findAt(((4500.000000, 0.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(900.000000), constraint=FINER) f = a.instances['Film_3'].faces pickedRegions = f.findAt(((4500.000000, -250.000000, 0.0), )) a.setMeshControls(regions=pickedRegions, elemShape=QUAD_DOMINATED) e2 = a.instances['Film_2'].edges pickedEdges = e2.findAt(((0.0, -600.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(20.000000), constraint=FINER) pickedEdges = e2.findAt(((9000.000000, -600.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(20.000000), constraint=FINER) pickedEdges = e2.findAt(((4500.000000, -500.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(900.000000), constraint=FINER) f = a.instances['Film_2'].faces pickedRegions = f.findAt(((4500.000000, -600.000000, 0.0), )) a.setMeshControls(regions=pickedRegions, elemShape=QUAD_DOMINATED) e3 = a.instances['Film_1'].edges pickedEdges = e3.findAt(((0.0, -1450.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(150.000000), constraint=FINER) pickedEdges = e3.findAt(((9000.000000, -1450.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(150.000000), constraint=FINER) pickedEdges = e3.findAt(((4500.000000, -700.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(900.000000), constraint=FINER) f = a.instances['Film_1'].faces pickedRegions = f.findAt(((4500.000000, -1450.000000, 0.0), )) a.setMeshControls(regions=pickedRegions, elemShape=QUAD_DOMINATED) pickedEdges = e3.findAt(((4500.000000, -2200.000000, 0.0), )) a.seedEdgeByNumber(edges=pickedEdges, number=int(900.000000), constraint=FINER) partInstances =(a.instances['Film_1'], ) a.generateMesh(regions=partInstances) partInstances =(a.instances['Film_2'], ) a.generateMesh(regions=partInstances) partInstances =(a.instances['Film_3'], ) a.generateMesh(regions=partInstances) elemType1 = mesh.ElemType(elemCode=CAX8R, elemLibrary=STANDARD) elemType2 = mesh.ElemType(elemCode=CAX6M, elemLibrary=STANDARD) f = a.instances['Film_3'].faces faces = f.findAt(((4500.000000, -250.000000, 0.0), )) pickedRegions =(faces, ) a.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2)) f = a.instances['Film_2'].faces faces = f.findAt(((4500.000000, -600.000000, 0.0), )) pickedRegions =(faces, ) a.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2)) f = a.instances['Film_1'].faces faces = f.findAt(((4500.000000, -1450.000000, 0.0), )) pickedRegions =(faces, ) a.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2))
myModel.ContactProperty('Indenter-Film') myModel.interactionProperties['Indenter-Film'].TangentialBehavior(formulation=FRICTIONLESS) myModel.interactionProperties['Indenter-Film'].NormalBehavior(pressureOverclosure=HARD, allowSeparation=OFF, constraintEnforcementMethod=DEFAULT) a = myModel.rootAssembly s1 = a.instances[indenter_used].edges side2Edges1 = s1.findAt(((0.170711, 0.070711, 0.0), )) region1=regionToolset.Region(side2Edges=side2Edges1) s1 = a.instances['Film_3'].edges side1Edges1 = s1.findAt(((4500.000000, 0.0, 0.0), )) region2=regionToolset.Region(side1Edges=side1Edges1) myModel.SurfaceToSurfaceContactStd(name='Interaction_Indenter-Film', createStepName=step_Load, master=region1, slave=region2, sliding=FINITE, thickness=ON, interactionProperty='Indenter-Film', adjustMethod=NONE, initialClearance=OMIT, datumAxis=None, clearanceRegion=None)
myModel.ContactProperty('Film-Film') myModel.interactionProperties['Film-Film'].TangentialBehavior(formulation=ROUGH) myModel.interactionProperties['Film-Film'].NormalBehavior(pressureOverclosure=HARD, allowSeparation=OFF, constraintEnforcementMethod=DEFAULT) a = myModel.rootAssembly region1=a.instances['Film_3'].surfaces['Surf-Bottom'] region2=a.instances['Film_2'].surfaces['Surf-Top'] myModel.SurfaceToSurfaceContactStd(name='Interaction_Film3-Film2', createStepName=step_Load, master=region1, slave=region2, sliding=FINITE, thickness=ON, interactionProperty='Film-Film', adjustMethod=NONE, initialClearance=OMIT, datumAxis=None, clearanceRegion=None) a = myModel.rootAssembly region1=a.instances['Film_2'].surfaces['Surf-Bottom'] region2=a.instances['Film_1'].surfaces['Surf-Top'] myModel.SurfaceToSurfaceContactStd(name='Interaction_Film2-Film1', createStepName=step_Load, master=region1, slave=region2, sliding=FINITE, thickness=ON, interactionProperty='Film-Film', adjustMethod=NONE, initialClearance=OMIT, datumAxis=None, clearanceRegion=None)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=ON, bcs=ON, predefinedFields=ON, interactions=OFF, constraints=OFF, connectors=ON, engineeringFeatures=OFF) a = myModel.rootAssembly e1 = a.instances['Film_3'].edges edges1 = e1.findAt(((0.0, -250.000000, 0.0), )) region = regionToolset.Region(edges=edges1) myModel.DisplacementBC(name='BC_Film_3', createStepName=step_Load, region=region, u1=0.0, u2=UNSET, ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None) e1 = a.instances['Film_2'].edges edges1 = e1.findAt(((0.0, -600.000000, 0.0), )) region = regionToolset.Region(edges=edges1) myModel.DisplacementBC(name='BC_Film_2', createStepName=step_Load, region=region, u1=0.0, u2=UNSET, ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None) e1 = a.instances['Film_1'].edges edges1 = e1.findAt(((0.0, -1450.000000, 0.0), )) region = regionToolset.Region(edges=edges1) myModel.DisplacementBC(name='BC_Film_1', createStepName=step_Load, region=region, u1=0.0, u2=UNSET, ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None) e1 = a.instances['Film_1'].edges edges1 = e1.findAt(((4500.000000, -2200.000000, 0.0), )) region = regionToolset.Region(edges=edges1) myModel.DisplacementBC(name='BC_Film_1_2', createStepName=step_Load, region=region, u1=0.0, u2=0.0, ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None)
r1 = a.instances[indenter_used].referencePoints refPoints1=(r1[2], ) region = regionToolset.Region(referencePoints=refPoints1) myModel.DisplacementBC(name='BC_Indentation_step', createStepName=step_Load, region=region, u1=0.0, u2=ind_h, ur3=0.0, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=OFF, bcs=OFF, predefinedFields=OFF, connectors=OFF) mdb.Job(name='Job1', model='multilayer_model_2021-04-27', description='Indentation of multilayer sample', 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=1, numDomains=2)
Thanks for reporting this bug. I updated the matlab script to generate python script for FE model. Please let me know if OK now.
it works perfectly now... thank you very much
Hi David,
I have noticed in tutorials/examples included in NIMS is that it does not return layer thickness what we put in MATLAB GUI e.g If put t1=200nm , t0=1500 and rest is the substrate and generates python script. When I visualize results in Abaqus it appears that film thickness are changed. Could you please have a look at it. I have tried to replace T0 and T1 but it does help. Please see below Images.
Kind Regards,
Qamar