Skip Navigation
Skip to contents

eTSNE


ANZINE : CAE 기술 매거진

PyAnsys Geometry와 Ansys Discovery를 이용한 형상 생성 및 형상 변수 자동화 알아보기

 

PyAnsys Geometry와 Ansys Discovery를 이용한 형상 생성 및 형상 변수 자동화 알아보기

 

 

Introduction 

본 호에서는 Ansys CAD Tool인 Ansys Discovery™ (이하 Discovery)는 형상을 생성하거나 Clean-up에 특화된 CAD Tool로 Python 기반의 PyAnsys Geometry와 연동하여 자동으로 형상을 생성하고 형상 변수를 적용하여 형상 변화에 따른 Parametric Study를 사용자화 할 수 있는 유용한 방법을 소개하고자 한다. 

본 글에 사용된 Ansys Discovery™ (이하 Discovery)의 버전은 2024R2, PyAnsys Geometry의 버전은 0.10.4 이다.
[그림 1]과 같이 길이를 ‘L’, 직경을 ‘D’의 변수로 갔는 간단한 Pipe 형상을 자동으로 생성하고, 해당 형상 설계 변수(이하 변수)를 Parameter화 하여 다양한 형상을 생성해 보도록 하겠다.

 


[그림 1] Pipe 형상 및 설계 변수

 

 

■ Step 1. PyAnsys Geometry 설치

PyAnsys Geometry를 사용하기 위해서는 통합개발환경이 필요하며, 인터넷에서 Jupyter, PyCahrm등 다양한 통합개발환경을 제공하고 있으니 사용자가 원하는 통합개발환경을 설치하여 사용하면 되며, PyAnsys Geometry를 사용하기 위한 설치 명령어는 [코드 1] 과 같다.


 
[코드 1] PyAnsys Geometry 설치

 

 

■ Step 2. PyAnsys Geometry 모듈 불러오기

Discovery의 다양한 기능을 사용하기 위해서는 통합개발환경에 추가되어야 하며 [코드 2]와 같이 사용자가 필요한 기능만을 불러올 수도 있다.


 
[코드 2] Discovery의 기능 불러오기

 

 

launch_model_with_discovery는 Discovery를 실행시키고 Discovery의 각 기능들을 수행하기 위한 Ansys Geometry Core 라이브러리이다. 해당 라이브러리에는 Math, Misc, Sketch와 같은 서브 패키지가 있으며, 순서대로 2D 좌표를 설정하기 위한 Point2D, 단위 설정을 위한 UNITS, 2D Sketch 작업을 위한 Sketch, 변수 크기를 설정하기 위한 Quantity 및 Time Delay를 위한 Time 모듈을 불러왔다.

 

■ Step 3. 형상 변수 설정

[그림 1]에서 정의한 변수 D와 L에 대한 정의는 [코드 3] 과 같이 작성하며, 뒤쪽에서 형상을 생성하기 위한 작업 수행 시 단위를 설정하기 때문에 본 단계에서는 단위 설정이 필요 하지 않다.


 
[코드 3] 직경(D) 및 길이(L) 변수 정의
 

■ Step 4. Discovery 실행

일반적으로 코드 작성시 반복적으로 나타나는 긴 명령어(문자)의 경우 간단한 변수로 정의한다. [코드 4]는 Sketch를 작성하기 위한 Sketch 평면은 sk 변수로, Discovery를 실행시키기 위한 명령어는 modeler 변수로 정의하였으며, 마지막으로 Discovery의 프로젝트 이름을 생성하기 위한 명령어는 design 변수로 정의하였다.
여기서 product_version은 Discovery 버전을 의미하며 2024R2의 경우 242를 입력해 주면 된다. 프로젝트 이름에 Pipe의 변수를 적용하기 위해 변수를 받아오는 { }와 format(D, L)로 정의하였다.
 


[코드 4] Discovery 실행 및 Project 생성

 

 

■ Step 5. Pipe 형상 생성

이전 단계에서 불러온 Sketch 기능은 Discovery의 Sketch 기능과 같이 라인, 원, 사각형, 호 등 기능을 사용할 수 있다. 원의 경우 [코드 5]와 같이 circle을 입력해 주면 Sketch 기능 중 원을 사용하겠다는 의미이며, Point2D는 원의 중심 좌표를, Quantity는 원의 직경을 의미하며 [코드 3]에서 정의한 직경 변수 ‘D’를 입력하였다.
해당 원을 기반으로 Pipe 형상을 생성하기 위한 Pull 기능 명령어는 extrude_sketch이며, name은 생성된 Body의 이름, sketch는 [코드 4]에서 정의한 Sketch 평면(sk), distance는 Pull 기능의 길이를 의미한다. Pull 길이는 원생성과 마찬가지로 Quantity와 길이 변수 ‘L’을 입력하였다. 본문에서 정의된 UNITS의 경우 mm 이외에도, ft, m 등 다양한 단위 정의가 가능하니 사용자 편의에 맞는 단위를 선택할 수 있다.
 


[코드 5] Sketch와 Pull 기능 실행

 

[그림 2]는 [코드 5]까지 진행된 상태를 보여준다. 프로젝트 이름에 [코드 3]에서 정의된 변수 입력된 것을 볼 수 있으며, Discovery의 Measure 기능을 이용하여 생성된 Pipe의 직경과 길이가 변수 D, L과 동일함을 알 수 있다.

[그림 2] 생성된 Pipe 형상

 

■ Step 6. Named Selection 설정

추후 Ansys Fluent와 같은 해석 Tool에서 경계 조건을 설정하기 위한 면을 Discovery에서 미리 정의가 가능하며, 이 Named Selection 기능은 [코드 6]과 같이 create_named_selection 명령어를 통해 설정할 수 있다.
Pull 기능으로 생성된 Pipe의 면은 생성된 순서대로 번호가 붙는데 처음 Sketch 과정을 통해 생성된 면이 1번, Pull 기능을 사용해 생성된 1번과 마주보는 면이 2번이고, 옆면이 3번이다. 하지만 Python의 첫번째 배열은 “1”이 아닌 “0”부터 시작하기 때문에 faces의 숫자가 0부터 시작한 것을 볼 수 있다. 이 숫자가 헷갈릴 경우 엉뚱한 면에 다른 이름이 정의되거나, 생성되지 않은 면을 정의하려고 하기 때문에 유의해야 한다.


  
[코드 6] Named Selection 정의

 

[그림 3]은 Named Selection이 정의된 P_out의 면을 붉게 표시하고 있으며, P_out의 경우 1번 즉, 두번째로 생성된 면에 정의하였고 해당 면의 위치가 Sketch(원점) 면과 마주보는 면임을 확인할 수 있다.
 


[그림 3] Named Selection 확인

 

■ Step 7. Pipe 형상 확인 및 저장

코드의 경우 사용자가 작성한 순서대로 별도의 멈춤 과정 없이 순차적으로 진행되기 때문에 사용자가 형상이 생성되는 도중 중간 결과를 확인하기 위해서는 코드와 코드사이에 Delay를 적용하여야 한다. Delay는 time 모듈의 sleep 명령어를 사용하면 되며, ( )안의 숫자는 초(sec)를 의미한다.
 


[코드 7] 100초 일시정지

 

Discovery는 오직 Windows 환경에서만 사용할 수 있다. 만약 사용자가 Linux 환경에서 Fluent Meshing을 이용하여 격자를 생성하고자 하는 경우에는 scdocx가 아닌 pmdb 확장자로 저장해야 별도의 변환과정 없이 형상을 불러올 수 있다. 이에, [코드 8]은 pmdb와 scdocx 확장자로 저장하는 명령어를 보여주고 있으며, “D:?File_{ }_{ }”은 파일 저장이름이 아닌 저장 경로를 의미하고, 새롭게 생성하는 폴더명에도 앞서 정의한 변수를 설정할 수 있다. 파일 이름은 해당 폴더에 프로젝트 명으로 저장된다.
 


[코드 8] PMDB 및 SCDOCX 저장

 

■ Step 8. Fluent Meshing에서 파일 불러오기

[그림 4]는 앞서 코드를 통해 생성 및 저장된 Discovery 형상 파일이 Fluent Meshing에서 정상적으로 불러와지는 것을 보여준다.
 


[그림 4] Watertight Geometry

 

 

■ 반복문을 이용한 변수에 따른 다양한 형상 생성

변수를 Parameter화하여 Parametric Study를 하고자 하는 경우에는 for 문을 이용하여 변수 별 다양한 형상을 이미 앞서 만들어진 코드 기반으로 손쉽게 생성할 수 있다.
먼저 직경과 길이 변수를 각각 3개씩 배열 형태로 정의하였고, 앞서 생성된 코드 위에 for 문이 적용된 것을 볼 수 있다. for 문에서 i는 0부터 시작하여 전체 코드가 실행될 때 마다 1씩 증가하며, D의 배열 개수(len(D) = 3)이 되면 for문 반복을 중단한다. 코드 내부 D와 L의 변수를 보면 기존과 같이 D나 L이 아닌 D[i]와 L[i]로 선언된 것을 볼 수 있으며, 이는 D와 L의 변수가 배열로 선언되었기 때문이다.
 


[코드 9] 반복문을 이용한 형상 생성 자동화

 

결과적으로 D와 L 변수를 순차적(0, 1, 2번)으로 가져와 형상을 생성하기 때문에 폴더명이 D와 L의 순서로 생성된 것을 볼 수 있고, 폴더 내에 pmdb와 scdocx 확장자로 2개의 파일이 저장된 것을 볼 수 있다[그림 5].


 

[그림 5] 생성된 3개의 폴더와 파일

 

맺음말

제품 개발의 주기가 짧아지고 있는 요즘 수많은 유사한 형상을 사용자가 손으로 생성하고 수정하기에는 불가능하다. 본 글에서 소개한 PyAnsys Geometry를 사용하면 다양한 형상 설계 변수에 따라 손쉽게 형상 생성이 가능하며, 이전에 소개한 PyFluent™와 연계하여 형상뿐만 아니라 해석 자동화까지 가능하기 때문에 Parametric Study에 많은 도움이 될 것으로 기대된다.

 

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