요약
- ANSYS CFX는 내장 Perl 인터프리터(Power Syntax)를 통해 전처리부터 후처리까지 전 과정을 스크립트로 자동화할 수 있습니다.
- GUI에서 수행하는 모든 작업은 CCL(CFX Command Language)로 표현되며, Perl은 이 CCL을 프로그래밍 방식으로 제어하는 역할을 합니다.
- 본 글에서는 CFX에서 Perl을 사용하기 위한 기초 문법과 Pre/Solver/Post 각 단계의 자동화 예제를 다룹니다.
Power Syntax란?
ANSYS CFX는 자체적으로 Perl 인터프리터를 내장하고 있습니다. CFX 내에서 Perl 코드를 실행할 수 있는 이 환경을 Power Syntax라고 부릅니다.
CFD 해석 과정에는 경계 조건 변경, 격자 수정, 결과 추출 등 수많은 반복 작업이 포함됩니다. 여러 케이스를 수동으로 처리하면 시간이 많이 소요될 뿐 아니라 실수가 발생하기 쉽습니다. Power Syntax는 이러한 반복 작업을 스크립트로 자동화하여, 파라미터 연구나 대량 후처리를 효율적으로 수행할 수 있게 합니다.
Power Syntax는 CFX-Pre의 Command Editor, CFD-Post의 세션 파일, 그리고 운영체제 명령줄에서 사용할 수 있습니다.
CCL과 Perl의 관계
CFX의 모든 설정은 CCL(CFX Command Language)이라는 텍스트 명령어로 정의됩니다. GUI에서 버튼을 클릭하는 모든 동작은 내부적으로 CCL을 생성하고 수정하는 과정입니다.
Perl 스크립트는 이 CCL을 프로그래밍 방식으로 제어합니다. 조건문, 반복문과 같은 로직을 통해 CCL을 동적으로 생성하고 수정할 수 있습니다. 즉, CCL이 "무엇을 설정할 것인가"를 정의한다면, Perl은 "어떤 논리로 설정을 구성할 것인가"를 담당합니다.
CCL에 대한 자세한 내용은 이전 글 "ANSYS CFX CCL 가이드"를 참고하시기 바랍니다.
CFX에서 Perl 사용법
CFX-Pre와 CFD-Post에서 Perl 코드를 사용하려면 줄 앞에 느낌표(!)를 붙입니다. 느낌표가 없는 줄은 CCL로 해석되고, 느낌표가 있는 줄은 Perl로 해석됩니다.
# 이 줄은 CCL로 해석됨
FLOW: Flow Analysis 1
&solve
END
# 느낌표로 시작하면 Perl로 해석됨
! my $velocity = 10;
! print "Current velocity: $velocity\n";
이 구분 규칙 덕분에 하나의 스크립트 안에서 CCL과 Perl을 자유롭게 섞어 쓸 수 있습니다.
Perl 기초 문법 — CFX에서 필요한 최소한
Perl을 처음 접하는 CFX 사용자를 위해, 자동화 스크립트 작성에 꼭 필요한 핵심 문법만 정리합니다.
기본 규칙
- 모든 문장은 세미콜론(
;)으로 끝납니다. - 대소문자를 엄격히 구분합니다.
- 주석은
#으로 시작합니다. 여러 줄 주석 블록은 없으므로, 각 줄마다#을 붙여야 합니다. - 공백과 들여쓰기는 가독성 용도이며 실행에 영향을 주지 않습니다.
변수 타입
Perl의 변수는 이름 앞의 기호로 타입이 결정됩니다.
스칼라 변수는 $ 기호를 사용하며, 하나의 값(숫자 또는 문자열)을 저장합니다. CFX 스크립팅에서 가장 많이 사용하는 타입입니다.
! my $velocity = 15.0; # 숫자
! my $fileName = "Case_01.def"; # 문자열
배열은 @ 기호를 사용하며, 여러 값을 순서대로 저장합니다. 인덱스는 0부터 시작하고, 개별 요소에 접근할 때는 $를 사용합니다.
! my @velocities = (10, 12, 14, 16, 18, 20);
! my $first = $velocities[0]; # 10
해시는 % 기호를 사용하며, 키-값 쌍으로 데이터를 저장합니다.
! my %params = ("inlet_vel" => 10, "outlet_pres" => 0);
! my $vel = $params{"inlet_vel"}; # 10
제어문
for 반복문은 파라미터 스터디에서 가장 많이 사용하는 구문입니다.
! for (my $i = 10; $i <= 20; $i++) {
! print "Velocity: $i m/s\n";
! }
foreach는 배열의 각 요소를 순회할 때 사용합니다.
! my @cases = ("Case_A", "Case_B", "Case_C");
! foreach my $case (@cases) {
! print "Processing $case\n";
! }
if 조건문은 특정 조건에 따라 다른 설정을 적용할 때 사용합니다.
! if ($velocity > 15) {
! print "High velocity case\n";
! } else {
! print "Low velocity case\n";
! }
문자열 처리
큰따옴표(") 안에서는 변수가 자동으로 치환됩니다. 작은따옴표(') 안에서는 치환이 일어나지 않습니다.
! my $vel = 10;
! print "Velocity is $vel m/s\n"; # Velocity is 10 m/s
! print 'Velocity is $vel m/s\n'; # Velocity is $vel m/s\n (그대로 출력)
파일명이나 CCL 문자열을 동적으로 조합할 때 큰따옴표를 활용하면 편리합니다.
CFX-Pre 자동화 — 파라미터 스터디
CFX-Pre에서 스크립트를 실행하려면 Command Editor를 사용합니다. 메뉴에서 Tools > Command Editor를 선택하면 스크립트 입력 창이 열립니다.
아래는 입구 속도를 10 m/s부터 20 m/s까지 변경하며 11개의 해석 정의 파일을 자동 생성하는 예제입니다.
! for (my $vel = 10; $vel <= 20; $vel++) {
EXPRESSIONS:
Inlet Velocity = $vel [m s^-1]
END
! my $fileName = "Case_Vel_${vel}.def";
! &Save($fileName, "Definition");
! print "Saved $fileName\n";
! }
위 코드에서 느낌표 없는 줄(EXPRESSIONS ~ END)은 CCL로 해석되어 CEL 표현식 값을 변경합니다. 느낌표가 있는 줄은 Perl로 해석되어 반복문 제어와 파일 저장을 수행합니다.
이렇게 CCL과 Perl을 혼합하면, GUI에서 11번 반복해야 할 작업을 몇 줄의 스크립트로 완료할 수 있습니다.
CCL_Process 함수
Perl 코드 내에서 CCL을 직접 문자열로 구성하여 전달할 수도 있습니다. &CCL_Process() 함수를 사용합니다.
! my $vel = 15;
! my $CCL = "EXPRESSIONS:\n Inlet Velocity = $vel [m s^-1]\nEND";
! &CCL_Process($CCL);
이 방식은 CCL 블록을 조건문 안에서 동적으로 구성해야 할 때 유용합니다.
Solver 배치 실행 자동화
CFX-Pre에서 생성한 다수의 해석 파일은 cfx5solve 명령어로 배치 실행할 수 있습니다. Windows 배치 스크립트와 연계하면 야간이나 주말 유휴 시간에 대량의 해석을 자동으로 수행할 수 있습니다.
순차 실행 배치 스크립트
현재 폴더의 모든 .def 파일을 순서대로 실행하는 Windows 배치 스크립트입니다.
REM 현재 폴더의 모든 .def 파일을 순차 실행
FOR %%f IN (*.def) DO (
echo Running solver for %%f
cfx5solve -def "%%f" -batch
echo Finished %%f
)
echo All simulations completed.
-batch 옵션은 GUI 없이 백그라운드로 해석을 실행합니다. 해석이 완료되면 다음 파일로 자동 진행됩니다.
초기값 지정 실행
이전 해석 결과를 초기값으로 사용하여 수렴을 가속화할 수도 있습니다.
cfx5solve -def Case_Vel_12.def -ini Case_Vel_11_001.res -batch
속도를 조금씩 증가시키는 파라미터 스터디에서는 이전 결과를 초기값으로 활용하면 수렴 시간을 크게 줄일 수 있습니다.
CFD-Post 후처리 자동화
스크립팅의 진정한 강점은 후처리 자동화에서 드러납니다. 수십 개의 결과 파일에서 동일한 위치의 데이터를 추출하거나, 동일한 시점의 컨투어 플롯을 이미지로 저장하는 반복 작업을 완벽하게 자동화할 수 있습니다.
세션 파일 활용
CFD-Post에서 수행한 작업을 세션 파일(.cst)로 저장하면, 해당 작업이 CCL과 Perl 코드로 기록됩니다. 이 세션 파일을 편집하고 재활용하면 나만의 후처리 자동화 스크립트를 만들 수 있습니다.
세션 파일 저장 방법은 CFD-Post 메뉴에서 Session > Save Session을 선택하면 됩니다.
데이터 추출 예제
특정 포인트의 압력 값을 추출하여 CSV 파일에 기록하는 예제입니다.
# 결과 파일 로드
>load filename=Case_Vel_10_001.res
# 특정 포인트에서 압력 값 추출
! my $pressure = probe("Pressure", "Point 1");
# CSV 파일에 결과 기록
! open(my $fh, '>>', "pressure_results.csv");
! print $fh "10, $pressure\n";
! close $fh;
이 스크립트를 반복문과 결합하면 모든 해석 결과에 대한 데이터 추출을 자동으로 수행할 수 있습니다.
배치 모드 실행
CFD-Post는 GUI 없이 명령줄에서 세션 파일을 실행할 수 있습니다.
cfdpost -batch my_postprocess.cst
이 방식으로 해석 완료 후 후처리까지 자동화 파이프라인에 포함시킬 수 있습니다.
실무 팁
- Power Syntax 스크립트를 처음 작성할 때는 GUI에서 원하는 작업을 먼저 수동으로 수행한 뒤, 세션 파일이나 CCL 출력을 확인하여 필요한 CCL 명령을 파악하는 것이 효율적입니다.
- 파일 경로는 반드시 영문 디렉토리로 구성합니다. 한글 경로는 Perl 인터프리터에서 인코딩 오류를 유발할 수 있습니다.
- 한글 Windows에서 Perl 스크립트 실행 시
Korean_Korea.949 is unsupported로케일 경고가 발생할 수 있습니다. 배치 스크립트 상단에set LC_ALL=C를 추가하거나, Perl 스크립트 상단에no warnings 'locale';를 삽입하면 해결됩니다. 이 경고는 Perl 5.38.0 이상에서 비 UTF-8 로케일에 대한 처리가 강화되면서 발생하는 것으로, 해석 결과에는 영향을 주지 않습니다. cfx5solve의-batch옵션으로 GUI 없이 해석을 실행하면, 원격 접속이나 야간 무인 운전에 활용할 수 있습니다.- 스크립트에서
print문으로 진행 상황을 출력하면, 대량 실행 시 어떤 케이스까지 완료되었는지 추적하기 편리합니다.
결론
ANSYS CFX의 Power Syntax(Perl 스크립팅)를 활용하면 반복적인 CFD 작업을 자동화하여 업무 효율을 크게 높일 수 있습니다. CCL이 해석 설정의 언어라면, Perl은 그 설정을 프로그래밍 방식으로 제어하는 도구입니다. 파라미터 스터디 케이스 생성, 배치 해석 실행, 대량 후처리 데이터 추출까지, 한 번 구축한 자동화 스크립트는 이후 프로젝트에서도 재활용할 수 있습니다.
- 테스트 환경: ANSYS CFX 2024 R1 이상
- 마지막 업데이트: 2026.03