Skip Navigation
Skip to contents

eTSNE


ANZINE : CAE 기술 매거진

ANZINE Home Tech-Insight

Ansys Mechanical의 Script Recording 기능을 통한 PyMechanical 활용법

Ansys Mechanical의 Script Recording 기능을 통한 PyMechanical 활용법

 
Introduction 

PyMechanical은 Python 환경에서 사용하는 Ansys Mechanical™ 관련 라이브러리로, PyMAPDL과 유사하게 내부 명령어를 이해하고 있어야 활용할 수 있다. 그러나, PyAnsys™ 홈페이지에 제시된 예제만으로는 적용 범위에 한계가 있어, Mechanical 내에서 제공되는 Record 기능을 통해 Python 명령어를 자동으로 생성하는 방식을 사용한다. 다만, Record 기능을 사용할 경우, 요소 번호나 면의 번호 등이 자동으로 부여되는 특징이 있어, 사용자가 고유의 ID를 정확히 파악하지 못하면 자동화나 다양한 조건을 적용하기에 한계가 있다. 이에 본 문서에서는 Record 기능을 기반으로 Mechanical 명령어를 구성하고, 이를 PyMechanical에서 효과적으로 활용하는 방법을 소개하고자 한다. 모델을 불러오는 과정부터 물성 정의, 구속 조건 설정까지 관련된 예제를 통해 실제 적용 방법을 살펴본다.

 
 
■ Ansys Mechanical의 Script Recording 기능 사용 방법

PyMechanical의 명령어를 효과적으로 확인하는 방법은 바로 Mechanical의 Script Recording 기능을 활용하는 것이다. 이 기능은 Mechanical에서 수행한 작업을 자동으로 Python 명령어로 변환하여 기록하며, 생성된 명령어는 PyMechanical로 적용할 수 있다. Script Recording 기능을 사용하기 위해서는 먼저 Mechanical 내에 있는 Python script 기능을 활성화해야 한다 [그림 1]. 해당 기능은 Automation 그룹의 Scripting에서 선택할 수 있으며, 이를 실행하면 [그림 2]와 같이 Mechanical Scripting 창이 나타난다.

 

 
[그림 1] Mechanical의 Scripting 기능

 

 [그림 2]의 붉은색 박스로 표시된 항목이 바로 앞서 언급한 Script Recording 기능이다. 해당 버튼을 활성화한 후, UI에서 작업을 수행하면, 진행한 작업에 따라 해당 과정이 자동으로 Python 명령어로 기록된다. 
이번 예제는 먼저 Mechanical을 사용하여 모델을 불러오는 기능을 실행해본다. 이 과정은 Workbench를 사용하지 않고, Mechanical이 단독으로 실행되는 환경에서 진행된다. 이는 Mechanical 환경이 독립적으로 실행되는 PyMechanical 라이브러리를 고려하여 Mechanical 단독 구동 방식으로 사용했다. 기존 버전에서는 Workbench의 Geometry Cell을 통해 모델링을 불러오는 방식이 일반적이었으나, 2024R1부터 Workbench 없이도 독립적으로 실행할 수 있도록 업데이트 되었다. 따라서 본 문서에서 제시하는 예시들은 2024R1 이후 버전에서 진행하는 것을 권장한다.

 
[그림 2] Mechanical Scripting 환경

 

■ 형상 모델 불러오기

[그림 2]의 Recording 버튼이 눌러진 상태에서, Outline Tree의 ‘Geometry Imports’를 선택한 후, 오른쪽 마우스 버튼을 클릭하면 [그림 3]과 같이 ‘Add Geometry Import’ 옵션이 표시되고 이 기능에서 ‘From File’을 통해 모델 파일을 불러오면, 모델이 자동으로 추가된다. 모델 파일을 선택하고 ‘Import’ 버튼을 클릭하면 [그림 4] 와 같이 해당 작업에 대응하는 명령어가 자동으로 생성된다.

 


[그림 3] Mechanical에서 모델 불러오는 방법

 


[그림 4] Script Recording 기능으로 생성된 Geometry import 명령어

 

생성된 명령어는 처음에는 복잡해 보일 수 있으나, 규칙을 이해하면 간단해진다. 색상으로 구분된 항목은 자동으로 생성된 파라미터로, 임의로 변경할 수 있는 변수이다. 다만, 동일 색상의 파라미터는 일관되게 설정해야 한다. 파라미터는 [그림 5]와 같이 수정할 수 있다.

 


[그림 5] 자동 생성된 명령어 파라미터 수정본

 


[그림 5]의 4~5줄을 실행하면, 앞선 UI에서 “Add geometry import”를 수행된 것과 동일한 동작이 실행된다. 이때, 불러올 형상 모델 설정들은 geom_format과 geom_preference에서 정의된다. 만약, 해당 명령어를 이해하기 어렵다면, script 명령어를 직접 입력하여 한 줄씩 실행해 보는 것을 권장한다. 이를 통해 명령어가 의미하는 바를 직관적으로 확인할 수 있어 이해하는 데 도움이 된다. 사실상 기본적인 solid body를 사용할 경우, geom_add.Import의 내부 인자인 모델 파일 경로만 변경해도, 별다른 문제없이 모델링을 가져올 수 있다.

 

■ 해석 system 추가하기

Mechanical을 단독으로 실행하면, [그림 6]과 같이 Workbench의 Mechanical model 시스템을 실행한 것과 동일한 동작을 한다. 그리고 어떠한 해석을 진행할 지 선택해야 한다. 여러 해석 시스템 중에 어떤 항목을 선택해도 상관없으나, 본 예제에서는 [그림 7]과 같이 Home 탭에서 Analysis를 선택하여 Static Structural 시스템을 추가했다. 이때, 생성되는 명령어는 [그림 8]의 A와 같으며, 두 줄의 명령어는 실제로 한 줄로 축약하여 표현할 수 있다. Model 하위 항목에 AddStaticSturcturalAnalysis()가 있기 때문에 [그림 8]의 B와 같이 간단히 표현된다.

 

 
[그림 6] Mechanical Model 환경 (workbench 및 Mechanical 환경)

 


[그림 7] Mechanical에서 해석 시스템 추가 방법


A.
 
B.
 
[그림 8] Static Structural 시스템 추가 명령어

 

 

이때, Static Structural 시스템은 ‘Static’이라는 변수로 정의했다. 만약 modal = Model.AddModalAnalysis()로 정의했다면 Modal 시스템이 추가되고, ‘modal’이라는 이름의 파라미터가 정의된다. 이렇게 파라미터를 정의하면, 추후 경계조건이나 해석 내의 Analysis setting을 명령어로 처리하기 용이 해진다. 예를 들어 [그림 9]와 같이 Modal 시스템과 Static Structural 시스템이 있다고 가정한다면, Modal 시스템에서 fixed support를 추가하려 할 때, Static Structural 시스템에도 동일한 구속 조건이 존재하므로, 어떤 해석에서 fixed support를 추가할 지 명확히 정의해줘야 한다.

 

 
[그림 9] Static Structural과 Modal 해석 시스템

 

■ 경계 조건 정의하기

Script recording 기능을 활성화한 후, 원하는 시스템에 fixed support를 추가하여 생성된 명령어를 살펴보면, 해석 시스템이 가진 고유 숫자 (ex. 32)가 정의되어 있음을 확인할 수 있다. 각 기능이 갖고 있는 고유의 ID는 직접적으로 확인하기 어려우며, 자동화 작업을 진행할 때마다 ID 번호는 변경될 수 있어 고정하여 사용할 수 없다. 따라서, 앞서 Model.AddStaticStructural로 정의한 파라미터 ‘static’을 사용하여 [그림 10]의 B와 같이 정의할 수 있다.

A
 
B
 
[그림 10] 경계 조건을 명령어로 추가하는 방법

 

■ Named selection 생성하기

앞서 명령어를 통해 fixed support 구속 조건을 부여했으나, 이를 적용할 면이나 선은 정의하지 않았다. 각 바디와 surface 또한 고유 ID를 가지고 있지만, 직접 확인하기 어렵고 활용하기도 쉽지 않다. 따라서, 일반적으로는 Named Selection을 활용하는 방식이 더 효율적일 수 있다. 아래 예시는 Named Selection worksheet를 이용해 반경 2.5 mm 조건을 만족하는 4개의 면(face)을 선택하는 과정이다. [그림 11]과 같이 worksheet 세부 설정을 완료하면, 조건에 부합하는 면이 자동으로 선택된다. Script recording 기능으로 생성된 명령어는 [그림 12]와 같으며, 앞서 설명한 바와 같이, 파라미터 변경 및 명령어를 단순화하는 방법을 적용하면 오른쪽 예시와 같이 표현할 수 있다. 이때, Named selection으로 생성한 항목의 이름은 ‘hole’로 정의하였다. 


 
[그림 11] Named Selection의 Worksheet 환경

 

 
[그림 12] Named Selection에 대한 명령어

 

 

■ Recording으로 생성되지 않는 기능 활용하기

이제, 앞서 명령어로 생성한 Named Selection을 활용하여 fixed support의 적용대상을 정의할 수 있다. 다만, Recording 기능을 활성화하더라도 일부 항목은 기록되지 않는다. 예를 들어, fixed support의 scoping method를 Named Selection으로 설정하는 방식은 기록되지 않아, 생성된 명령어를 직접 확인할 수 없다. 이러한 명령어를 확인하기 위해서, ACT Help를 참고하거나 검색을 통해 사례를 찾는 방법이 사실상 유일하다. 다음 [그림 13]과 같이, 특히 PyMechanical 홈페이지에서 스크립트 예제들을 참고할 수 있다.

 

 
[그림 13] PyMechanical Script helpers



[그림 14]의 Script helpers에서 Named Selection를 활용한 예시 중, “Use a named selection for a fixed support”를 보면, [그림 15]처럼 구속조건 설정에 대한 명령어를 확인할 수 있다. 앞서 Recording 기능을 통해 확인했던, AddFixedSupport()가 ‘FIX_SUPPORT’로 변수처리 되어 있으며, ‘FIX_SUPPORT’가 적용될 면은 Named Selection인 ‘SECONDNS’로 지정된다. 따라서, FIX_SUPPORT.Location = SECONDNS 명령어 한 줄로 적용 대상 면을 정의할 수 있다.

 


[그림 14] PyMechanical Script helpers의 Named selection 활용 예제

 


[그림 15] Named Selection을 활용한 FixedSupport 정의 예시

 

마찬가지로, static_fs = static.AddFixedSupport()로 정의된 구속조건에 ‘hole_ns’로 정의한 named selection을 적용하기 위해 [그림 16]과 같이 구성할 수 있다.

 

 
[그림 16] Named Selection을 활용한 FixedSupport 정의 방법

 



지금까지 작성한 모든 명령어는 [그림 17]과 같다.

 

 
[그림 17] 명령어 전체 코드

 

 

■ Python 구문을 사용하여 물성 정의하기

지금까지 생성된 명령어는 Script Recording 기능을 통해 작성된 것으로, 실제 Python 구문은 포함되지 않았다. 그러나 PyMechanical을 활용한 다양한 자동화 작업에서는 반복문이나 조건문 등 Python 구문이 필수적으로 사용된다. 예를 들어, 모델 내 여러 파트에 물성을 정의할 경우, Workbench에서는 물성 라이브러리를 선택하여 각 파트에 수동으로 적용하지만, 파트 수가 많은 경우, Python 구문을 활용하면 보다 효율적으로 자동화할 수 있다. 
따라서 본 문서에서는 Python 구문을 사용하여 모델 내 모든 파트에 대해 이름 기준으로 물성을 다르게 적용하는 방법을 설명하고자 한다. 또한 앞선 예제는 Mechanical 단독 실행 환경에서 진행되었으므로, 물성 라이브러리를 활용하기 위해서는 설치 경로 내 xml 파일을 직접 지정해야 한다. 필요에 따라 다른 물성 파일을 사용해도 무방하다.
일반적으로 설치 경로인 “Ansys_Inc\v251\Addins\EngineeringData\Samples”에서 workbench에서 사용했던 물성 파일을 확인할 수 있으며, 본 예제에서는 가장 많이 사용되는 [그림 18]의 General_Material.xml을 활용했다.

 

 
[그림 18] Workbench 내 물성 라이브러리 위치

 

 

물성에 관련한 명령어는 Model.Materials이다. Recording 기능을 활용하여 물성을 불러오는 명령어를 생성했다. Mechanical 환경의 Materials에서 “Import Materials”를 선택하면, xml 확장자 파일을 지정할 수 있으며, 앞서 언급한 경로에서 ‘General_Materials.xml’ 파일을 선택한다. 이후 생성된 명령어를 정리하면, [그림 19]와 같다. 

 


[그림 19] 물성 라이브러리 불러오기

 

 

물성 라이브러리를 불러온 후, 각 모델링 이름에 따라 물성을 적용하는 코드를 구성해야 한다. 사용한 모델은 [그림 20]과 같이 구성되어 있다. “Housing” 모델은 FR-4 물성을 적용하고 “inner_part”로 명명한 모델들은 모두 Aluminum Alloy 물성을 적용하였다. 

 


[그림 20] 모델링 구성

 

 

먼저 모델링 list를 확인해야 한다. 물성을 확인할 때 Model.Materials 명령어를 사용한 것처럼, 모델링 객체는 Model.Geometry로 구성된다. Geometry의 하위 항목들을 확인하려면 Model.Geometry.Children을 사용할 수 있다. 
다음 구문은 반복문 (for)을 통해 각 모델링 객체 이름을 ‘full_name’ 파라미터에 저장하고, 조건문(if)을 통해 이름에 ‘Inner’가 포함된 경우에는 Aluminum Alloy를, 그 외의 모델링 객체에는 FR-4 물성을 적용하도록 구성한다. 이에 따른 전체적인 스크립트는 [그림 21]과 같다.

 


[그림 21] 모델링 별 물성 적용 예시

 

 

■ Python에서 PyMechanical로 실행하기

다음은 Script Recording 기능과 Python 구문을 활용하여 생성한 명령어를 Python 환경에서 실행하는 예제이다. 본 예제를 진행하기 위해서는 Python이 설치되어 있어야 하며, PyMechanical 라이브러리가 있어야 한다. 설치 방법은 PyAnsys 홈페이지를 참고하면 된다. Python 환경에서 PyMehcnaical을 사용하기 위해서는 [그림 22]와 같이 먼저 해당 라이브러리를 불러온 후, launch_mechanical() 명령어를 통해 mechanical을 실행할 수 있다. 이때, 내부 인자 중 batch = False로 정의하면 Mechanical UI에서 확인 가능하다.

 


[그림 22] Python 환경에서 PyMechanical 실행하기

 

 

앞서 정의한 PyMechanical 명령어들을 Python 환경에서 실행하여 Mechanical로 전달하기 위해서는 run_python_script() 명령어를 사용한다. 해당 명령어는 단일 라인을 인자로 실행할 수도 있고, 여러 구문을 포함한 블록 단위로 실행시키는 것도 가능하다. 전체 코드와 예제 모델링은 첨부파일에서 확인할 수 있다.

 

 

맺음말

본 문서에서는 Scripting Recording 기능을 활용한 PyMechanical 라이브러리 적용 방법을 소개하였다. 기본적으로 파라미터를 변경하는 방법부터 ACT help 참조, Python 구문 활용 등 다양한 접근 방법을 다뤄봤으며, 이를 Python 환경에서 직접 적용할 수 있음을 확인하였다. 이처럼 복잡한 전처리나 유사한 작업을 반복적으로 진행하는 경우, 앞서 설명한 내용들을 바탕으로 효율적인 작업을 구축하고 자동화할 수 있을 것으로 기대된다.

 

■ 참고자료

 

좋아요이 원고가 마음에 든다면 하트를 꾸욱!