Skip Navigation
Skip to contents

eTSNE


ANZINE : CAE 기술 매거진

▶ 69호 : 구조해석을 위한 PyAnsys 라이브러리 소개

구조해석을 위한 PyAnsys 라이브러리 소개


#1. PyMechanical 
#2. PyDPF

 

PyAnsys는 Ansys의 제품을 Python 환경에서 사용할 수 있도록 하는 라이브러리 에코시스템이다. 이를 활용하여 웹 애플리케이션을 제작하거나, 자동화 프로그램 제작, AI 활용 등 다양한 작업을 수행할 수 있다.

이번 호에서는 PyAnsys 중 PyMechanical 및 PyDPF에 대한 소개와 이를 활용하여 제작한 간단한 자동화 프로그램을 소개하고자 한다.

 

#1. PyMechanical


PyMechanical 소개

PyMechanical은 Ansys Mechanical을 Python에서 사용할 수 있는 라이브러리이다. Python 내에서 명령어를 통해 Mechanical을 실행하고 모델링 불러오거나, 격자 생성, 접촉 조건 설정, 경계 조건 설정 등 다양한 작업을 수행할 수 있다. 사실 이미 Ansys Mechanical 내에서 Python을 활용한 Mechanical Scripting을 수행할 수 있다. 다만 이는 Ansys Mechanical을 반드시 실행한 후 내부에서 Python API를 사용하는 방식이며, IronPython을 기반으로 구동된다. 또한, Ansys Mechanical 내에서는 Numpy, Matplotlib과 같은 외부 라이브러리를 사용하기 어렵고, 지속적으로 대두되는 AI 관련 라이브러리(TensorFlow, PyTorch, Keras, 등) 역시 사용하기 어렵다. 반면, PyMechanical은 CPython을 기반으로 하며, 외부에서 Mechanical을 열고 구동할 수 있다는 장점이 있다. 표면적으로 큰 차이가 없어 보이나, 신호를 주고받는 방법이나 구동 방식을 고려하면 PyMechanical이 더욱 다양한 작업이 가능하다. Python 환경에서 작업하기 때문에 기존에 사용할 수 없었던 라이브러리를 활용할 수 있고, Ansys Mechanical과 동일한 API를 활용하기 때문에 기존에 사용하던 방식과 유사한 방식으로 사용할 수 있다.

 

 
[그림 1] gRPC

 

Interface

PyMechanical은 Embedded Instance와 Remote Session이라는 두 가지 인터페이스를 제공한다. 
먼저, Embedded instance는 Python.NET을 기반으로 수행한다. 이는 Python 메모리에 Mechanical Instance를 할당 후 사용하는 방법이며, Python 내 Mechanical Scripting API에서 사용할 수 있는 전역 변수들을 가져와서 접근할 수 있다. 아래 예시는 Embedded Instance 인터페이스로 Fixed Support를 추가하는 스크립트이다. 전처리 과정을 제외하고, 기존의 Mechanical Scripting 사용 방식과 완전히 동일한 것을 확인할 수 있다. 전처리 과정에 해당하는 스크립트는 Mechanical Scripting API에 접근하기 위한 내용이다.

다음, Remote Session은 gRPC(Google Remote Procedure Call)를 기반으로 한다. gRPC는 구글에서 개발한 원격프로세서 호출 프레임워크로써 데이터를 주고받는 통신 방법 중 하나이며, 이는 PyMAPDL의 구동 방식과 동일한 방식이다. PyMechanical에서는 Python이 Client이고, Mechanical은 Server로써, 각자 Server와 Client에서 생성된 명령들을 gRPC Interface로 작성 후 Mechanical에 명령을 전달하고 그에 따른 응답을 확인할 수 있는 프로세스로 구축된다. 아래 예시는 Embedded Instance에서의 예시와 동일한 Fixed Support를 추가하는 스크립트이다. PyMAPDL과 동일한 gRPC를 기반으로 동작하기 때문에 사용 방식 역시 동일한 것을 확인할 수 있다. 

PyMechanical의 Interface 중 어떠한 것을 사용해도 상관없다. 그러나, 명령어에 따라 Mechanical 창을 실시간으로 열거나, 신호를 보내는 작업을 GUI로 확인하고 싶은 경우, Remote Session 방식이 적합하다. 반대로, 별도의 데이터 처리 명령어인 mechanical.run_python_script 없이 Python 환경 내에서 Mechanical에서 사용하던 방법을 그대로 사용하고자 한다면, Embedded Instance 방식이 적합하다. 필자는 PyMechanical을 사용하기 전 PyMAPDL을 먼저 사용하였었기 때문에 PyMAPDL과 동일하게 gRPC를 기반으로 하는 Remote Session을 사용하고 있다.


PyMechanical 설치

우선, PyMechanical은 PC에 Ansys Mechanical이 설치되어 있어야 하며, 2023 R1 이상을 지원하고 있으나 호환성 및 최신 기능을 활용하기 위해 최신 버전 사용을 권장한다. Python 버전은 3.9부터 3.12까지 지원하며, 아래의 스크립트로 PyMechanical 라이브러리를 설치할 수 있다.

라이브러리를 정상적으로 설치했다면, 위에서 보였던 예시처럼 PyMechanical 라이브러리를 가져온 후 원하는 작업을 수행하면 된다.

이때, 각 Interface마다 라이브러리를 가져오고 구동하는 방법이 다르니 유의해야 한다.

 

PyMechanical을 활용한 자동화 프로그램

일반적으로 Ansys Mechanical에서의 해석 워크플로우는 형상을 불러와 물성을 적용하고 접촉 조건과 경계 조건을 정의하는 순으로 진행된다. 하지만 해석 업무가 익숙하지 않은 사용자는 이러한 과정이 어려울 수 있기 때문에 사전에 정의된 순서대로 작업할 수 있도록 Wizard 형태의 간단한 프로그램을 제작해보았다. 프로그램의 초기 화면은 [그림 2]와 같다. 사용자가 하나의 작업만 집중할 수 있도록 하나의 탭 당 하나의 작업만 수행하도록 제작하였다. 첫 번째로 수행할 작업은 형상을 가져오는 것이다. 해석하고자 하는 형상을 선택하고 실행 버튼을 누르면 [그림 3]과 같이 해당 형상이 포함된 Ansys Mechanical이 실행된다.

 

[그림 2] 형상 탭

 

[그림 3] Ansys Mechanical 실행 모습

 

실행 버튼을 누르고 다음 버튼을 누르면 [그림 4]의 화면으로 전환된다. 형상을 가져온 후 수행할 작업은 물성을 가져오는 것이다. Ansys Workbench의 Engineering Data에서와 동일하게 xml 확장자로 저장된 물성을 가져올 수 있다. 원하는 물성을 선택하고 가져오기 버튼을 누르면 [그림 5]와 같이 Materials Tree에 생성된 것을 확인할 수 있다. 

 

[그림 4] 물성 탭

 

[그림 5] 물성 가져온 모습

 

다음 수행할 작업은 접촉을 정의하는 것이다. Bonded 접촉과 Frictional 접촉이 구현되어 있는데, 우선 NS 생성 버튼을 통해 [그림 7]과 같이 접촉조건 정의를 위한 Named Selection을 생성한다. fc와 ft는 각각 Frictional 접촉에 대한 Contact 부분과 Target 부분을 의미한다. 만약 Bonded NS 생성 버튼을 눌렀다면 bc와 bt라는 이름으로 생성된다. Contact 부분과 Target 부분에 대한 Named Selection을 정의한 후 접촉 정의 버튼을 클릭하면 [그림 8]과 같이 접촉조건이 자동으로 정의된다. 이 때, 접촉조건 탭에서 정의한 마찰 계수가 적용되고, Formulation은 Normal Lagrange가 자동으로 설정되어 있다.

 

[그림 6] 접촉조건 탭

 

[그림 7] NS 생성

 

[그림 8] 접촉 정의

 

접촉을 정의한 후 수행할 작업은 격자를 생성하는 것이다. 자동으로 입력되어 있는 격자 크기는 가져온 형상의 Bounding Box Diagonal을 기준으로 계산된 값이며, 전체 격자 크기에 입력된 값은 Global Element Size에 해당하고, 접촉부 격자 크기는 접촉조건 탭에서 정의한 Frictional 접촉부에 Sizing 조건을 정의한다. 격자 생성 버튼을 누르면 [그림 10]과 같이 자동으로 Sizing 조건 추가 후 격자를 생성한다.

     

[그림 9] 격자 탭

 

[그림 10] 격자 생성

 

다음 수행할 작업은 경계조건을 정의하는 것이다. Displacement, Frictionless Support, Fixed Support 조건이 구현되어 있고, Displacement 조건은 입력된 Load Step 개수에 따라 여러 단계로 입력할 수 있다. [그림 11]의 오른쪽 그림과 같이 입력하고 Displacement 버튼을 클릭하면 [그림 12]와 같이 Displacement 조건이 추가된다. 

    

[그림 11] 경계조건 탭

 

[그림 12] Displacement 조건

 

마지막 탭은 해석을 수행하는 단계이다. 해당 탭에선 사용자가 별도로 설정할 것은 없다. [그림 13]의 해석 버튼을 눌러 해석을 수행했을 때, 만약 수렴하지 못하고 발산한다면 1번에서 5번순으로 접촉 조건의 설정 변경 후 재해석을 자동으로 수행한다. 
 

[그림 13] 해석조건 탭

 

아래는 해당 프로그램을 시연하는 데모 영상이다.

 

 

여기서 소개한 프로그램은 간단하고 기본적인 워크플로우에 대한 자동화를 수행한다. PyMechanical을 직접 사용하면 보다 다양한 기능을 추가할 수 있고, 현업에서 주로 사용하는 기능을 추가하여 나만의 프로그램을 만들 수 있다. 반복적인 작업을 자동화하여 효율적인 업무를 수행하고자 한다면 직접 사용해보기를 추천한다.

 

활용 팁 - Record

만약 내가 수행하고자 하는 작업의 명령어를 모를 때는 Ansys Mechanical에서의 Record 기능을 이용하여 도움을 받을 수 있다. [그림 14]는 Record 기능을 통해 Fixed Support에 해당하는 스크립트를 기록하는 예시이다. 좌측과 같이 Start Recording이라는 빨간 원형 아이콘을 클릭하고 기존에 했던 방식대로 GUI에서 Fixed Support를 추가하면, 우측과 같이 해당 작업에 해당하는 스크립트가 기록된다. 

 

[그림 14] Mechanical Scripting Record 사용 예시

 

다만 아쉽게도 이 기능으로 모든 작업이 기록되는 것은 아니므로, 이 기능으로 기록되지 않는 작업은 오픈소스 커뮤니티에 질문을 하거나 직접 찾아서 해결해야만 한다.

 

 

#2. PyDPF

 

PyDPF 소개

PyMechanical이 PyAnsys 중 솔버 및 해석 프로그램과 관련된 라이브러리였다면, PyDPF는 후처리와 관련된 라이브러리이다. PyMechanical로 모델 Import, 격자생성, 해석 및 결과 확인까지 모든 과정들이 한 번에 진행 가능하지만, 해석 데이터를 활용하여 특정 결과를 확인하고자 할 때 한계가 있다. 이는 PyDPF를 활용하여 보다 다양한 결과를 출력하거나 후처리를 진행할 수 있다.
PyDPF는 Python과 Data Processing Framework가 합쳐진 말로써, 데이터처리 프레임워크를 제공하는 라이브러리다. PyDPF를 사용하면 해석 데이터에 보다 쉽게 접근하여 결과 데이터를 변환할 수 있으며, 해석 데이터를 가지고 전/후처리를 수행할 수 있다. 또한 특정 Tool에 국한되어 있지 않고, Ansys에서 사용되는 여러 솔버들에 대한 결과를 처리할 수 있다는 장점이 있다. 구조해석과 관련한 MAPDL 솔버 및 LS-DYNA에 대한 결과도 처리 가능하며, 유동해석과 관련한 Fluent, CFX 데이터 또한 사용 가능하다. PyDPF가 지원하는 각 솔버 및 파일 확장자는 아래 [표 1]에서 확인해볼 수 있다. 즉, 결과를 확인하려는 솔버에 따라서 결과 파일의 Version을 확인하는 것이 좋다. 예를 들면 MAPDL이나 Mechanical은 2021 R1 이상 버전을 사용하여 해석한 결과 데이터만 PyDPF에서 사용할 수 있다.

다양한 확장자의 결과 데이터를 시각화 할 때 PyVista가 사용된다. PyVista는 데이터의 시각화를 위한 라이브러리이며, PyAnsys 라이브러리를 설치할 때 같이 설치된다. 그러므로 특정 Tool을 열어서 결과를 매핑하거나 입력하지 않아도 PyVista 라이브러리를 통해 시각화 할 수 있다. 이는 결과파일을 해당 Tool에서 직접 불러와 사용하는 방법이 아니라 DPF operator 방식으로 처리되며 PyVista로 시각화 할 수 있기 때문에 Ansys에 대한 라이선스가 없어도 사용가능한 장점이 있다. PyDPF는 데이터 파일만을 열어 사용하기 때문에 용량이 큰 결과 파일들을 사용해도 프로그램을 실행시켜 데이터를 불러오는 과정 보다 비교적 시간적 소모가 작다.

 

PyDPF 종류

PyDPF는 PyDPF-Core, PyDPF-Post 및 PyDPF-Composites으로 크게 세가지로 구성되어 있다. 먼저 PyDPF-Core는 여러 입출력 데이터를 라이브러리에 연결해 전/후처리를 수행할 수 있는 라이브러리이다. 두번째로 PyDPF-Post는 해석 결과 파일을 사용하여 메타데이터와 결과를 추출하여, 후처리 작업에 대한 다양한 기능을 제공하고 있다. 마지막으로 PyDPF-Composites은 복합재 관련하여 결과를 추출하고 시각화 할 수 있는 라이브러리이다. 일반적으로 결과 데이터를 정제하고 확인하는 과정에서 PyDPF-Core와 PyDPF-Post가 같이 가장 많이 사용된다. 

 

PyDPF 구성 및 사용방법

PyDPF는 엔지니어가 해석 데이터에 접근하기 위한 여러 항목들을 제공하며, Field로 표현되는 데이터와 해당 데이터에 대하여 처리하고 변환하는 작업을 수행하는 Operator로 구성된다 [그림 15]. 

 

[그림 15] Operator 구성

 

Operator는 일반적으로 크게 세가지의 역할을 한다. 첫번째, 데이터를 불러오는 역할로써 다양한 확장자의 결과 데이터를 읽을 수 있도록 도와준다. 두번째로는 데이터를 변환 작업에 사용할 수 있다. Field나 Field Container를 입력 받아 연산자를 통해 데이터에 대한 분석, 평균화 및 필터링 작업등을 수행하여 원하는 결과를 추출한다. 마지막으로 데이터를 출력하는 작업을 한다. 정제된 데이터를 사용자가 원하는 형식에 맞춰 출력할 수 있으며, 출력하려는 데이터 형태에 따라 vtk, h5, csv 및 txt로 내보낼 수 있다.
Field는 [그림 16]과 같이 연속적이거나 수치적으로 정의된 물리적인 데이터가 포함된 Raw Data와 Meta Data로 구성되어 있다. Raw Data는 해석을 통해 도출된 결과에 데이터를 포함하고 있으며, Meta Data는 데이터에 대한 단위나 범위 즉, 결과 데이터에 대한 추가적인 정보를 제공한다. Field가 사용될 때, Raw Data와 Meta Data가 함께 사용되면서 데이터 분석과 처리가 가능해진다.

 

 


[그림 16] Field와 Entities 포함된 내부 데이터

 

Field 데이터를 불러오고 Operator를 통해 결과를 확인하기 위한 모든 과정의 시작점은 DPF Model이다. DPF Model을 통해 앞서 설명한 Operator를 연결할 수 있으며, 결과 데이터 접근이 가능해진다. 

DPF Model에 입력되는 데이터는 결과뿐만 아니라 해석에 관련한 정보도 모두 포함하고 있다. 이를 크게 두가지로 분류하면 [그림 17]와 같이 Metadata와 Results로 분류할 수 있다. 


먼저 Metadata는 해석에 관련한 모든 정보를 포함하고 있다. 모델의 격자 데이터와 해석을 통해 추출할 수 있는 결과 및 Step, 어떤 종류의 해석을 진행했는지도 모두 확인할 수 있다. 두번째로 Result는 결과에 대한 데이터를 포함하고 있는 영역이다. 따라서 사용자가 원하는 정보에 따라 관련 항목에 대해 명령어를 달리 적용해야 한다. 즉, 모델에 대한 Metadata를 출력하면 Geometry 및 해석에 대한 정보가 표기되고 Result 항목에 대해 출력하면 결과 항목들에 대해 제시된다. 결과 데이터는 Field에 저장되어 있고 과도 해석이나 조화 해석에 대한 결과 항목들은 Multi-Step으로 인하여 여러 Field가 합쳐진 Fields Container로 구성된다. 

 

 

[그림 17] DPF Model 구조

 

PyDPF 설치 및 사용 방법

PyDPF를 사용하기 위해선 Ansys 2021 R1 이상이 설치되어 있어야 하며, 아래 스크립트로 설치가 가능하다. 

PyDPF는 앞서 제시한대로 라이브러리 특성 및 내부 데이터에 맞게 사용하여 다양한 정보들을 추출할 수 있다. 아래 스크립트는 PyDPF의 라이브러리를 불러오고 내재되어 있는 Crankshaft 파일을 불러와 사용하는 예제이다. print 명령어로 Model의 구성요소를 살펴보면 결과 파일의 단위와 어떤 해석을 진행했으며, 확인할 수 있는 결과가 제시된다. 그 아래 항목을 보면 절점 및 요소 개수를 볼 수 있으며, 시간과 Step 및 Substep도 확인할 수 있다.

 
 

 

모든 결과항목들을 포함하고 있는 Model 내에서 실제 결과에 대한 항목들은 model.results를 통해 확인된다. 확인 가능한 결과 항목들 중에서 Displacement를 확인하기 위해서 그림과 같이 model.results 뒤에 displacement 항목을 추가만 하면 불러올 수 있다.

 

해당 예제는 Displacement 결과가 포함되어 있다. 추출한 결과에 대해 매핑하여 그래픽으로 확인하고 싶은 경우, plot 명령어를 추가하면 [그림 18]과 같이 Total Deformation을 그래픽으로 확인할 수 있다.

 

[그림 18] PyDPF를 활용한 Total Displacement 결과 출력

 

다음으로 PyDPF 데이터를 어떻게 정제하여 사용하는지에 대해 알아보자. 대부분 단일 Operator로 기존 결과를 추출할 수 있으나, 여러 Operator를 사용하거나 연결시킨 Workflow를 통해 추가적으로 원하는 결과를 얻을 수도 있다.
 

[그림 19] 최소 및 최대 변위값 추출을 위한 Workflow 예시

 

이에 대한 간단한 예시를 [그림 19]에 제시하였다. 해석 결과 파일 중 rst 확장자명의 파일을 Input 값으로 받아 Displacement라는 Field를 추출하여 Norm Operator를 통해 Total Deformation을 추출한다. 해당 데이터 중 최소 및 최대 값을 추출하고자 최대/최소 출력에 대한 min_max Operator를 사용해 결과를 확보할 수 있다. 이때 Operator는 계산되거나 처리되는 특징에 의해서 입력과 출력 개수가 달라질 수 있다.

[그림 19]에 대한 Workflow는 아래 명령어처럼 구성하여 사용된다. 비교적 프로그램을 실행시켜 결과를 확인하는 방식보다 단순한 명령어로 결과 확인이 용이함을 확인할 수 있다. 

 


PyDPF를 활용한 Result Plotting 프로그램


일반적으로 Ansys를 통해 구조해석을 수행하면 작업 폴더에 rst 확장자의 결과 파일이 생성되고 열해석을 수행하면 rth 확장자의 결과 파일이 생성된다. 이러한 결과 파일을 확인하기 위해선 Ansys Mechanical을 실행하고, 별도의 전처리 작업 후 가져와야 정상적으로 확인할 수 있다. 사용자가 원하는 작업이 단순히 결과 파일을 출력하는 것이라면 매우 비효율적인 작업이 될 수 있다. 이러한 상황일 때, PyDPF를 활용하면 Ansys Mechanical을 실행하지 않고도 간단히 결과 파일을 확인할 수 있다. [그림 20]은 PyDPF를 활용하여 제작한 Result Plotting 프로그램이다. 먼저, Result File 항목에서 rst 또는 rth 확장자의 결과 파일을 가져오면 Model Info 항목에서 선택한 결과 파일의 해석 타입, 단위계, 격자 개수, Step 정보 등 다양한 정보를 출력한다. 이후 Number of Set에서 출력하고자 하는 Step을 기입하고, Result Type에서 어떤 결과 항목을 출력할지 선택 후 Plot 버튼을 클릭하면 [그림 21]과 같이 나타난다.

 

 [그림 20] Result Plotting 프로그램 

 

[그림 21] Equivalent Stress 출력

 

아래는 해당 프로그램을 시연하는 데모 영상이다. 

 

 

이처럼 PyDPF를 활용하면 간단하게 결과 파일을 출력할 수 있다. 여기서 소개한 프로그램은 단순히 결과 파일을 출력하는 작업만 가능하다. 그러나 본문에서 언급했던 것처럼 PyDPF는 출력 외에도 다양한 작업이 가능하기 때문에 데이터 처리와 관련된 작업을 자동화하고자 한다면 PyDPF 활용해보기 바란다.

 

맺음말

이번 호에서는 PyAnsys 에코시스템 중 PyMechanical 및 PyDPF에 대해 살펴보았다. PyMechanical에 대한 소개 및 자동화 프로그램에 대한 예시를 통해 활용 가능성 및 장점에 대해 확인하였고, 다양한 해석 결과 파일을 확인할 수 있는 PyDPF의 구성 및 데이터 처리 예시를 살펴보았다. 본 호에서는 해당 라이브러리를 통해 수행할 수 있는 많은 기능 중 일부 기능만을 사용한 예시를 소개하였으므로 직접 활용하여 보다 강력한 나만의 프로그램을 만들어 보기를 바란다.

Reference

1.    PyAnsys 홈페이지: docs.pyansys.com
2.    GitHub: github.com/ansys

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