본문 바로가기
Program/ABAQUS

ABAQUS를 위한 Python Code 만들기 03 (Assembly와 Step)

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

안녕하세요. 어제에 이어서 계속된 'ABAQUS를 위한 Python Code 만들기' 포스팅입니다.

이번에는 어제의 포스팅에 이어서 Assembly와 Step 및 Boundary Condition에 대해서 설명을 하려고 합니다. 일단 이 부분은 ABAQUS Input 파일을 이해하시는 분이 더 쉽게 이해할 수 있을 것이라고 생각합니다. 왜냐하면, Python 구조가 전체적으로 Input파일의 형식을 따라가고 있기 때문입니다.

 

Import assembly

 

앞에서 똑같이 언급한 것과 같이 Import의 명령어는 모듈을 불러내는 부분입니다. 아래 Step 부분에도 똑같이 적용되는 부분이기 때문에 중복되는 부분은 이제부터 제외하고 설명할 수 있도록 하겠습니다.

 

a = mdb.models['Model-1'].rootAssembly

 

전 포스팅에서도 나왔지만, 이 부분은 rootAssembly의 구조를 대체할 변수 a로 지정하는 부분입니다. 아래에서 a라는 변수를 통해서 Instance를 정의하는 부분이나 추가적으로 Face, vertex를 정의할때 위에서 정의했던 a의 변수가 많이 사용되어지게 됩니다.

 

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

a.Instance(name='Part-1-1', part=p, dependent=ON)

 

ABAQUS/CAE에서 Assembly하신 분들은 모두 알겠지만, Assembly 과정에서 Part를 추가하게 되면, Instance라고 불립니다. 또한, 여기서 Dependent와 Independent를 설정하는 부분이 있습니다. 일단 단일 모델이기때문에 하나의 Instance만 추가하게 되지만, 추후에 여러 모델을 적용하게 된다고 하면 위와 같은 과정이 반복되어 설정이 되어야 합니다.


import step

mdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial',     initialInc=0.1)

 

위에서 Input파일 형식을 잘 아시는 분이 이 Python Code를 잘 이해할 수 있다고 했습니다. 그 이유는 Step의 형태가 비슷하기 때문입니다. Input파일에서는 Step 안에 Boundary Condition의 정보가 같이 들어가게 되고, Time Increment의 정보도 같이 도입되어지게 됩니다. 위의 형식은 Step의 모듈을 먼저 불러온 후에 Step의 형식은 Static으로 정의하게 됩니다. 또한, 그 Step의 이름은 Step-1로 지정을 하고, 이전 Step을 Initial로 적용해주게 됩니다.


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)

 

위의 Code는 고정되는 경계조건을 적용하는 조건입니다. 그 영역은 3차원 영역의 도면에서의 한쪽면을 선택해서 고정을 하려고 하는 것입니다. 또한, 이 과정의 첫번째는 Face를 지정하는 부분입니다. 'f1'이라는 변수가 Part에서의 전체적인 면을 선택한 것이고 getByBoundingBox라는 Script 명령어를 통해서 하나의 면을 선택해주는 것입니다. 저 부분은 두가지 포인트의 x,y,z의 순차적인 입력을 통해서 사각형 박스 안에서의 선택되는 면을 하나의 집합으로 만들어주고, 그 집합을 faces1으로 지정하는 과정입니다.

지정된 faces1의 영역은 Initial Step의 영역에서 Encastre 조건이 적용되어지게 됩니다.


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)

 

앞에서 고정 경계조건은 Face의 설정으로서 적용되었습니다. 하지만, 이번에는 Vertex로 적용을 했습니다. 여기서 Vertex는 ABAQUS에서의 Node를 나타내며, 이것을 선택하는 이유는 ConcentrateForce를 적용하기 위해서 입니다.

위의 Code는 ABAQUS/CAE에서의 Load 영역에서 하는 순서와 똑같기 때문에 모두 이해할 수 있을 것이라고 생각해서 이번 포스팅은 여기까지 쓰겠습니다. 이제 Python Coding 부분은 조금 남았기 때문에 조금더 힘을 내서 포스팅을 할 수 있도록 하겠습니다.

반응형

댓글