Search code examples
pythonabaqus

Creating a surface with a sketch using Abaqus Python


My question might sounds rather simple but my knowledge in Abaqus scripting is almost inexistent. My aim is to represent a set of polygons in the same part where each polygon represents a 2D surface (in 3D space) of the part. I am creating a script to generate a sketch for each polygon (not sure if this is the best approach). Then creating a surface foreach of the sketches.

How could I achieve this?

Many thanks!

The code:

from abaqus import *
from abaqusConstants import *
import sketch
import part

MyModel=mdb.Model(name='Model-1')


#-------------FIRST POLYGON------------------------------- 
s1=MyModel.ConstrainedSketch(name='__poly0__', sheetSize=100)

g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints

s1.Line(point1=(10.0, 10.0), point2=(10.0, 15.0))
s1.Line(point1=(10.0, 15.0), point2=(-10.0, 15.0))
s1.Line(point1=(-10.0, 15.0), point2=(-10.0, -15.0))
s1.Line(point1=(-10.0, -15.0), point2=(10.0, -15.0))
s1.Line(point1=(10.0, -15.0), point2=(10.0, -10.0))
s1.Line(point1=(10.0, -10.0), point2=(5, 0))
s1.Line(point1=(5, 0), point2=(10.0, 10.0))

#-------------SECOND POLYGON-------------------------------
s2=MyModel.ConstrainedSketch(name='__poly1__', sheetSize=100)

g, v, d, c = s2.geometry, s2.vertices, s2.dimensions, s2.constraints

s2.Line(point1=(10.0, 10.0), point2=(5, 0))
s2.Line(point1=(5, 0), point2=(10.0, -10.0))
s2.Line(point1=(10.0, -10.0), point2=(10.0, -15.0))
s2.Line(point1=(10.0, -15.0), point2=(15.0, -15.0))
s2.Line(point1=(15.0, -15.0), point2=(15.0, 0.0))
s2.Line(point1=(15.0, 0.0), point2=(10, 10))

#----------ONE PART WITH TWO PLANAR FACES (ONE PER POLYGON)-----
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D,type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']

#How can I put two planar faces here?

#First Polygon
#p.BaseShell(sketch=s1)
#del mdb.models['Model-1'].sketches['__poly0__']

#Second Polygon
#p.BaseShell(sketch=s2)
#del mdb.models['Model-1'].sketches['__poly1__']

#-------------------------------------------------------------

Solution

  • Surface can mean two things. Generally in Abaqus terminology a SURFACE is a reference to a face or edge of a part or assembly. It doesn't usually mean a flat part. Out side of Abaqus, creating a surface could be taken to mean creating a planar part.

    Here is a code like yours that makes a part in 3D space (a 2D part would only have edges in the sense of Abaqus SURFACES). Then it creates an Abaqus SURFACE on one of the 2 faces.

    from abaqus import *
    from abaqusConstants import *
    
    s1 = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=200.0)
    g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints
    s1.Line(point1=(-21.25, 22.5), point2=(-33.75, -20.0))
    s1.Line(point1=(-33.75, -20.0), point2=(-3.75, -32.5))
    s1.Line(point1=(-3.75, -32.5), point2=(40.0, -25.0))
    s1.Line(point1=(40.0, -25.0), point2=(25.0, 25.0))
    s1.Line(point1=(25.0, 25.0), point2=(-21.25, 22.5))
    
    #this creates the actual part - which is a planar surface that exists in 3D space
    p = mdb.models['Model-1'].Part(name='Part-2', dimensionality=THREE_D,type=DEFORMABLE_BODY)
    
    p = mdb.models['Model-1'].parts['Part-2']
    
    p.BaseShell(sketch=s1)
    del mdb.models['Model-1'].sketches['__profile__']
    
    
    #the following finds and creates a "surface" on the part. 
    f = p.faces
    face=f.findAt(coordinates=(0.0,0.0,0.0))
    face_ind=face.index
    side1Faces=f[face_ind:face_ind+1]
    
    p.Surface(side1Faces=side1Faces, name='Surf-1')
    

    If this isn't what your question asked, please explain more in your question.