본문 바로가기
Program/ABAQUS

ABAQUS를 위한 Python Code 만들기 04 (Job와 ODB 설정)

by 시레엔 2017. 4. 4.
반응형

안녕하세요. Python 예제 포스팅에 대한 마지막 설명 포스팅입니다. 오랜기간동안 계속 봐주셔서 감사합니다.

더 열심히 다양한 분야에 대해서 올릴수 있도록 하겠습니다. 하지만, 'ABAQUS/CAE'는 당분간은 못 올릴 것 같습니다. Adsense에 통과하려는 부분에서 사진에 대한 엄한 부분이 있기 때문에 조금 'ABAQUS/CAE' 포스팅을 늦추겠습니다.

아무튼 마지막 Python 예제 설명을 시작하겠습니다.

첫번째 Code는 아래 Import 명령어에서도 볼 수 있듯이, Mesh 모듈에 관한 부분으로 시작하도록 하겠습니다. 앞에 포스팅을 계속 봤으면, p라는 변수를 지정하는 것은 과정을 생략할 수 있는 치환 변수라는 것을 알 수 있을 것입니다.


import mesh

p = mdb.models['Model-1'].parts['Part-1']


또한, 아래에서 지정된 p의 변수를 통해 Seed Part의 사이즈를 등록시킬 수 있으며, Mesh 생성을 generate Mesh를 통해서 Mesh를 생성할 수 있습니다. 이것은 정말 기본적인 Mesh 방법이기 때문에 추가적으로 Local Seed를 설정한다고 하면, 'ABAQUS Documentation Script'를 확인하면 될 것 같습니다.


p.seedPart(size=W/4, deviationFactor=0.1)

p.generateMesh()


두번째는 Job에 관한 과정을 Python으로 풀이해놓은 과정입니다. 'ABAQUS/CAE'에서의 Job을 설정할때 나온 옵션들을 Model Database의 Job Script 명령어 안에 도입을 해줄 수 있습니다. 일반적으로 많이 설정하는 것은 'memory'가 90퍼센트 설정하는 것과, 'numCpus'는 4개로 설정하는 것을 알 수 있습니다. 또한, User Subroutine과 Scratch의 경로를 설정해줄 수 있다. 


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)


마지막으로 Job을 제출하는 부분입니다.

위와 동일하게 Model Database의 Submit을 하고, 다 될때까지 'waitForCompletion'이라는 명령어를 통해 Job이 끝날때까지 기다리게 됩니다. 이후의 ODB를 불러올때의 오류를 범하지 않기 위해 이 명령어를 사용하여 방지를 합니다.


mdb.jobs[job_name].submit(consistencyChecking=OFF)

mdb.jobs[job_name].waitForCompletion()    


Job을 끝낸 이후에 ODB를 불러드리는 과정을 아래에서 설명하고 있습니다. 이 부분의 job_name을 설정하는 것은 위에서 Job의 이름을 넣어주면 되는 것입니다. 위에서 job_name이라는 부분을 불러오기 위해 넣어준 것이고, '+job_name+'는 String 변수를 추가해주기 위해서 사용한 부분입니다.


session.viewports['Viewport: 1'].setValues(displayedObject=None)

o1 = session.openOdb(name='C:/Temp/'+job_name+'.odb')


o1이라는 변수로 불러온 ODB파일을 아래와 같은 변수의 정의를 통해서 Viewport에 추가하는 과정과 그 과정에서의 Contour를 출력하는 정의에 대해서 정의하고 있는 부분입니다.


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의 기초 Beam 예제를 설명한 부분이고 추후에 이 부분을 GUI 환경에 도입하는 과정에 대해서 설명을 드리겠습니다.

일단 제일 먼저 총 4개의 게시물의 설명을 이해하는게 중요하다고 생각합니다. 또한, 모르는 부분은 하나 하나 찾아보면서 공부하다보면 훨씬 잘할 수 있다고 생각합니다.

반응형

댓글