안녕하세요
오늘은 ABAQUS를 위한 PYTHON 예제에 대해서 설명을 드릴려고 합니다.
일반적으로 PYTHON의 법칙에 대한 정보를 몰라도 ABAQUS의 PYTHON이라고 따로 인식하시면 될 것 같습니다.
일반적으로 Python 파일을 Kernal Command Line Interface의 창에 넣어주면 Python code의 설정에 맞게 적용이 되어집니다.
또한, CAE로 모델을 구성하고 진행하는 모든 과정이 Temp 폴더의 rpy파일로 쓰여지기 때문에, CAE로 먼저 모델 구성을 한 뒤에 rpy파일을 확인하면 아래와 같은 형식으로 나와있습니다.
1. Sketch 및 Part 형상을 구성하는 단계입니다.
import sketch
import part
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.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=(L, H))
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseSolidExtrude(sketch=s, depth=W)
s.unsetPrimaryObject()
del mdb.models['Model-1'].sketches['__profile__']
2. Material을 구성하는 단계입니다.
import material
mdb.models['Model-1'].Material(name='material')
mdb.models['Model-1'].materials['material'].Density(table=((bar_material_density, ), ))
mdb.models['Model-1'].materials['material'].Elastic(table=((bar_material_youngs, bar_material_poissons), ))
3. Section을 구성하는 단계입니다.
import section
mdb.models['Model-1'].HomogeneousSolidSection(name='Section-1', material='material', thickness=None)
c = p.cells
region = regionToolset.Region(cells=c)
p.SectionAssignment(region=region, sectionName='Section-1',
offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='',thicknessAssignment=FROM_SECTION)
4. Assembly 과정입니다.
import assembly
a = mdb.models['Model-1'].rootAssembly
p = mdb.models['Model-1'].parts['Part-1']
a.Instance(name='Part-1-1', part=p, dependent=ON)
5. Step을 구성하는 단계입니다.
import step
mdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial', initialInc=0.1)
a = mdb.models['Model-1'].rootAssembly
f1 = a.instances['Part-1-1'].faces
faces1 = f1.getByBoundingBox(-1, -1, -1, 1, H+1, W+1)
region = regionToolset.Region(faces=faces1)
mdb.models['Model-1'].EncastreBC(name='BC-1', createStepName='Initial', region=region)
a = mdb.models['Model-1'].rootAssembly
v1 = a.instances['Part-1-1'].vertices
verts1 = v1. getByBoundingBox(L-1, H-1, -1, L+1, H+1, W+1)
region = regionToolset.Region(vertices=verts1)
mdb.models['Model-1'].ConcentratedForce(name='Load-1', createStepName='Step-1', region=region, cf2=-F,
distributionType=UNIFORM, field='', localCsys=None)
6. Mesh를 적용하는 부분입니다.
import mesh
p = mdb.models['Model-1'].parts['Part-1']
p.seedPart(size=W/4, deviationFactor=0.1)
p.generateMesh()
7. Job을 설정하고 제출하는 단계입니다.
mdb.Job(name=job_name, model='Model-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,
numGPUs=0)
mdb.jobs[job_name].submit(consistencyChecking=OFF)
mdb.jobs[job_name].waitForCompletion()
8. ODB를 불러오고 변형 모델을 볼 수 있는 부분입니다.
session.viewports['Viewport: 1'].setValues(displayedObject=None)
o1 = session.openOdb(name='C:/Temp/'+job_name+'.odb')
session.viewports['Viewport: 1'].setValues(displayedObject=o1)
session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=(
CONTOURS_ON_DEF, ))
session.viewports['Viewport: 1'].view.fitView()
위와 같이 Python에 대한 코드 구성이 되어 있지만, 중간 중간에 다른 변수들이 도입이 되어 있는 것을 볼 수 있습니다.
일단 오늘은 예제만 올려두고 내일 설명에 대해서 올리겠습니다. 또한, 참고하실 사항은 위의 코드를 복사해도 변수 설정을 해놓은 부분이 있어서 따로 수정을 하지 않으면, 도입을 할 수 없을 것입니다. 내일 설명 포스팅을 보시면서 따로 코드는 만들어 보셔야할 것 같습니다.
이상으로 Python 포스팅을 마치겠습니다.
'Program > ABAQUS' 카테고리의 다른 글
ABAQUS를 위한 Python Code 만들기 02 (Material와 Section) (0) | 2017.04.02 |
---|---|
ABAQUS를 위한 Python Code 만들기 01 (Sketch와 Part) (2) | 2017.04.01 |
ABAQUS 기초 예제 01 (KEYWORD) (0) | 2017.03.30 |
ABAQUS MPC 조건 적용하기 (KEYWORD) (0) | 2017.03.29 |
ABAQUS Fastener 적용하기 (KEYWORD) (0) | 2017.03.28 |
댓글