FEM Agent Converter — 대규모 구조 해석 설정 파일 변환을 AI로 자동화
Google Cloud Hackason 제출용
Zenn 기사 https://zenn.dev/nonn_engi/articles/5f913f1b09dcea
YouTube 데모 영상
VIDEO
대상 사용자
일상적으로 대규모 구조 해석을 수행하는 CAE 엔지니어.
해결하고 싶은 과제
대규모 구조 해석에서는 해석 소프트웨어의 사양에 따라 방대한 수의 설정 항목을 정확하게 기술해야 합니다. 하지만, 그 설정 방법을 아우르는 기술 매뉴얼은 수천 페이지에 달하며, 설정 항목 자체도 수백 가지에 이릅니다.
예를 들어, ANSYS LS-DYNA Keyword User's Manual는 Volume I만으로 4,315페이지이며, Volume III까지 합치면 총 페이지 수가 7,000페이지를 초과합니다.
이러한 매뉴얼에서 필요한 사양을 찾고, 개별 설정 항목을 이해하여 올바른 문법으로 해석 설정을 기술하는 작업에는 막대한 노력이 필요합니다. 게다가, 같은 종류의 설정이 해석 모델 내에 다수 존재하는 경우, 각각에 대응하는 변환 작업도 필요합니다.
해결책
FEM Agent Converter는 AI 에이전트를 활용하여 기술 매뉴얼에서 필요한 사양을 검색 및 참조하고, 해석 설정 파일의 변환 스크립트를 자동 생성합니다.
사용자는 대표가 되는 키워드 블록만 입력하면, 동일한 이름의 키워드 블록을 일괄 변환하는 스크립트를 얻을 수 있습니다.
이를 통해 키워드별로 매뉴얼 페이지를 선택하고, AI에 문헌을 재등록하여 스크립트를 생성하는 기존의 번거로운 작업을 줄일 수 있습니다.
앱의 특징 및 기존 방식과의 차이점
기존에는 NotebookLM에 기술 매뉴얼의 필요한 페이지를 문헌으로 등록하고, 키워드별로 변환 스크립트를 생성했습니다.
하지만, 변환 대상 설정 항목이 많은 반면, 등록 가능한 문헌 수에는 제한이 있습니다. 따라서 하나의 키워드를 변환할 때마다 관련 문헌을 찾아 등록하고, 불필요한 문헌을 삭제하여 교체한 후 다시 스크립트를 생성하는 작업이 필요했습니다.
본 앱에서는 이러한 문헌의 선정·등록·삭제를 반복하는 작업을 없앴습니다. 사용자는 대표가 되는 키워드 블록만 입력하면 필요한 기술 정보를 참조하고, 같은 이름의 키워드 블록을 일괄 변환하기 위한 스크립트를 얻을 수 있습니다.
매뉴얼 검색부터 설정 변환 스크립트 생성까지를 AI 에이전트로 효율화하여, CAE 엔지니어가 본래 집중해야 할 해석 업무에 몰입할 수 있는 환경을 목표로 합니다.
실증 사례: CCSA Toyota Camry 충돌 해석 모델
본 앱의 적용 대상으로 CCSA (Center for Collision Safety and Analysis)가 공개하는 Toyota Camry 차량 충돌 해석 모델을 사용합니다.
이 모델은 약 225만 요소, 약 1,000 부품으로 구성되어 있으며, 실제 차량의 충돌 시험 결과와의 비교 검증이 이루어진 대규모이자 실용적인 유한 요소 모델입니다.
대상 파일에는 43종류의 키워드가 포함되어 있으며, 그중에는 *CONSTRAINED_SPOTWELD_ID와 같이 7,000회 이상 출현하는 키워드도 존재합니다.
본 앱은 대표적인 키워드 블록을 입력함으로써, 동종 키워드를 일괄 변환하는 스크립트 생성 지원을 합니다. 이를 통해 방대한 설정 기술을 개별적으로 조사하고 변환하는 작업을 줄이는 것을 목표로 합니다.
변환 키워드 블록 예시
아래 예시에는 *PART, *SECTION_SHELL, *MAT_PIECEWISE_LINEAR_PLASTICITY의 3가지 키워드 블록이 포함되어 있습니다.
*PART
$# title
418_doorfrontwindowframe
$# pid secid mid eosid hgid grav adpopt tmid
2000361 2000361 2000361
*SECTION_SHELL
$# secid elform shrf nip propt qr/irid icomp setyp
2000361 16 0.0 3 1.0 1
$# t1 t2 t3 t4 nloc marea idof edgset
1.35 1.35 1.35 1.35
*MAT_PIECEWISE_LINEAR_PLASTICITY
$# mid ro e pr sigy etan fail tdel
변환 후 출력 문자열 (OpenRadioss 포맷)
위 스크립트에 샘플 데이터를 입력했을 때, 엄격한 글자 수 제한(필드 폭)을 충족하는 출력 결과입니다.
/PART/2000365
377_doorrearwindow
2000365 2000365
/PROP/TYPE1/2000365
Shell_2000365
24 2 2 0 0.0
0.0 0.0 0.0 0.0 0.0
3 0 4.1400 0.833333 1 1 0
/MAT/LAW44/2000365
Mat_2000365
2.57300E-09
70000.0 0.2200
1000.0 1000.0 1.0 0.0 1.0E+20
0.0 1.0 0 0 0.0 2
0.0150 1.0E+20 2.0E+20
앱이 출력한 변환 스크립트
3가지 키워드 블록 각각에 대해, 해석 설정 파일에 포함된 동일한 키워드를 일괄적으로 변환하는 스크립트입니다.
이번에는 LS-DYNA의 용어로 작성된 해석 설정 파일을 Openradioss의 용어로 작성된 해석 설정 파일로 변환하고 있습니다.
import re
def parse_ls_dyna(text):
lines = text.strip().split('\n')
data = {
'part': {},
'section_shell': {},
'mat': {},
}
current_keyword = None
keyword_lines = []
for line in lines:
...
def process_keyword(keyword, lines, data):
if keyword == '*PART':
if len(lines) >= 2:
data['part']['title'] = lines[0].strip()
line2 = lines[1]
data['part']['pid'] = int(line2[0:10].strip())
data['part']['secid'] = int(line2[10:20].strip())
data['part']['mid'] = int(line2[20:30].strip())
elif keyword == '*SECTION':
if len(lines) >= 2:
line1 = lines[0]
...
def convert_to_openradioss(data):
output = []
# 1. /PART
part = data.get('part')
if part:
...
샘플 데이터 실행
lsdyna_input = """
*PART
$# title
377_doorrearwindow
$# pid secid mid eosid hgid grav adpopt tmid
2000365 2000365 2000365
*SECTION_SHELL
$# secid elform shrf nip propt qr/irid icomp setyp
2000365 2 0.0 3 1.0 1
$# t1 t2 t3 t4 nloc marea idof edgset
4.14 4.14 4.14 4.14
*MAT_MODIFIED_PIECEWISE_LINEAR_PLASTICITY
$# mid ro e pr sigy etan fail tdel
20003652.57300E-9 70000.0 0.22 1000.0 1000.0 0.015
$# c p lcss lcsr vp epsthin epsmaj numint
1.0
$# eps1 eps2 eps3 eps4 eps5 eps6 eps7 eps8
$# es1 es2 es3 es4 es5 es6 es7 es8
"""
parsed_data = parse_ls_dyna(lsdyna_input)
openradioss_output = convert_to_openradioss(parsed_data)
print(openradioss_output)
향후 전망
본 애플리케이션은 기존의 해석 설정 파일을 변환하는 작업 자동화를 출발점으로 합니다.
장래에는 기술 매뉴얼 검색 및 참조, 해석 조건 정리, 설정 파일 생성, 일관성 검증까지를 일관되게 수행하는 AI 에이전트로 발전시키는 것을 목표로 합니다.
궁극적으로는 엔지니어가 해석하고 싶은 현상이나 조건을 사양으로 제공함으로써, 기존의 유한 요소 모델(FEM)을 활용하면서 OpenRadioss의 해석 모델을 효율적으로 구축할 수 있는 환경을 실현하고자 합니다.
논의