이 글은 2024년 10월 31일 한국전산유체공학회 추계 학술대회에 발표되었던 내용을 요약한 것입니다.
BARAM 개발 방법
BARAM은 (주)넥스트폼이 개발해서 공개한 범용 전산유체역학 프로그램 패키지입니다.(baramcfd.org) BARAM은 공개 소스 소프트웨어 기반의 공학 솔루션으로, 일반 소프트웨어의 개발과는 다른 방법으로 개발됩니다. 대략적인 개발 방법을 소개합니다.
개발 도구는 모두 공개 소스 소프트웨어를 사용하고 있습니다. 전산유체역학 계산을 위해 넥스트폼이 개발한 OpenFOAM 포크인 NextFOAM을 사용합니다. 그래픽 사용자 환경은 Pyside6를 이용하고 3차원 그래픽은 VTK 라이브러리를 사용합니다. 2차원 그래프는 PyQtGraph를 사용하고 개발 언어는 파이썬을 사용합니다.
BARAM의 개발 프로세스는 [요구사항 결정] – [CFD 코드 개발] – [UX 개발] – [테스트] – [문서화] – [공개] 등의 과정을 거치게 됩니다.
요구사항
현재 개발이 완료된 요구사항들은 다음과 같습니다.
- Compressible/Incompressible flow, Heat transfer(convection, conduction, CHT), Multi-phase(VOF, cavitation), Species transport
- Turbulence models : k-epsilon, SST k-omega, Spalar-Allmaras, LES, DES
- Non-Newtonian viscosity model
- MRF, Sliding mesh, Actuator disk, Source term, User defined scalar
- Mesh generation, mesh convert
- Monitoring, Report
- Batch run
개발 계획 중인 요구사항들은 다음과 같습니다.
- Radiation, Chemical reaction, Eulerian multi-phase, DPM, Heat exchanger model, Shell conduction
- Dynamic mesh : overset mesh, 6DOF, morphing, deform mesh
- POD/ROM, Acoustics, FSI, Optimization, Electromagnetics
- Pressure based coupled solver, Finite Area Method
- Builtin post-processor, Create fields
- More boundary conditiions, turbulence models…
요구사항들은 Gitlab의 Issue를 통해 내부적으로 관리하고 있습니다.
요구사항은 사용자의 요청, subscription 고객의 요청, 개발/해석 프로젝트 수행 시 필요 사항 등으로부터 도출 됩니다. 개발 우선 순위는 펀드의 유무, 활용도, 구현의 난이도, 사업성 등을 고려해서 결정합니다. 사용자의 요청은 github의 Issue와 discussion 페이지의 내용이 중심이 됩니다.
CFD 코드 개발
현재 버전인 NextFOAM-v2409는 ESI의 배포판을 기반으로 넥스트폼이 수정/개발한 코드가 포함되어 있습니다. OpenFOAM이 업그레이드가 되면 NextFOAM을 새 버전에 동기화 합니다.
요구사항을 만족하는 기능이 OpenFOAM 배포판에 있는지를 먼저 확인합니다. ESI, Foundation, Extended 3개의 배포판을 순차적으로 확인합니다. 해당 기능이 있다면 정확하게 구현되어 있는지와 다양한 조건과 낮은 격자 품질에서도 정상 작동하는지에 대한 실용성 검토를 수행합니다.
배포판 검토 결과가 충분히 만족스럽지 못한 경우, 누군가 공개한 코드가 있는지를 검토하는 단계로 넘어갑니다. 이 단계에서도 정확한 구현과 실용성 확인 수행됩니다. 이 역시 만족스럽지 못한 경우 직접 코드를 개발하게 됩니다.
아래 그림은 코드 개발 사례입니다. 요구사항은 화학종 계산 기능을 개발하는 것입니다. 먼저 OpenFOAM의 배포판에는 reactingFoam, fireFoam 등의 여러가지 연소 해석 용 솔버가 있으며, 이들은 당연히 화학종 계산이 가능합니다. 이 솔버들을 검토한 결과 몇 가지 생략된 항들 때문에 비물리적인 결과가 나타나는 것을 확인하였습니다. 그리고 모두 비정상상태 솔버이기 때문에 정상상태 계산에는 비효율적이며, 난류 슈미트 수(Schmidt No.)의 영향이 반영되지 않는다는 문제가 있습니다.
다음 단계로 Vijaya Kumar 등이 생략된 항을 추가하여 공개한 modifiedReactingFoam을 검토합니다. 비물리적인 결과는 나타나지 않지만 다른 문제는 여전히 남아 있습니다. 최종적으로는 Kumar의 코드를 참고하여 넥스트폼이 개발한 buoyantSimpleNFoam, buoyantPimpleNFoam 솔버에 화학종 계산 기능을 추가하는 방법으로 개발하였습니다.
UX(User eXperience) 개발
파이썬을 사용하고 3rd party 라이브러리는 Pyside6, VTK, pyFoam, ionicons, PyQtGraph를 사용합니다. 요구사항 문서화와 공유를 위해 xwiki를 사용하고, 저장소와 협업 도구는 gitlab과 github를 사용합니다.
아키텍처 설계 시 모듈화와 의존성 흐름(flow of dependency)이 중요합니다. 핵심적인 모듈은 coredb, view, openfoam이 있습니다. view는 그래픽 환경 구현을 위한 것이며 openfoam은 openfoam이 사용하는 딕셔너리를 만들기 위한 부분입니다. view와 openfoam은 coredb와 한쪽 방향의 의존성만 갖도록 되어 있습니다. 코드는 파이썬 스타일 가이드에 맞추어 일기 쉽게 만들어 집니다.
BARAM은 범용 프로그램이지만 고객의 요구에 따른 여러가지 맞춤형 프로그램들이 개발되어 납품 되었습니다. 이런 맞춤형 프로그램들은 BARAM의 branch로 통합 관리 되고 있습니다. 이를 통해 BARAM이 업그레이드 되면 branch들도 해당 기능들을 사용할 수 있게 됩니다.
테스트
테스트는 검증(validation), 기능(function), 회귀(regression) 테스트의 3가지로 나누어 진행됩니다.
기능 테스트는 새로 추가된 기능이 정상적으로 작동하는지를 검증합니다. 해석 결과의 정량적 검증과 UX의 정상 동장을 확인합니다. 이 과정에서 새로운 기능에 대한 검증 문제가 제작됩니다.
검증 테스트는 다양한 검증 문제에(validaiton test suite) 대해서 새로운 버전이 나올 때마다 해석 결과를 정량적으로 검증합니다. 이전 버전에서 검증된 결과와 비교해서 낮은 수준의 결과가 나온다면 그 원인을 찾고 문제를 해결합니다.
회귀 테스트는 다양한 테스트 문제에(regression test suite) 대해서 새로운 버전이 나올 때마다 이전 버전과 같은 동작을 하는지 확인합니다. 만들어 진 격자의 품질, 계산의 수렴성과 결과의 정성적 평가가 이루어집니다. 많은 문제들에 대해 UX의 모든 동작을 직접 확인해야 하기 때문에 상당히 많은 시간과 노력이 필요한 과정입니다. 지루하고 단순한 작업이 대부분이지만 문제가 있을 때 원인을 파악하고 해결 방안을 도출하는 것은 상당한 기술력을 필요로 하는 과정입니다.
이 세 단계의 테스트를 지나 소프트웨어가 공개되면 사용자들에 의한 테스트가 이루어집니다. 공개 소스 소프트웨어이기 때문에 별도의 베타 테스트 과정은 없습니다. 사용자들이 Issue, discussion 페이지를 통해 문제점과 개선안을 제시하면 그것들을 반영하여 필요한 경우 마이너 업그레이드를 하게 됩니다.
문서화
새로운 버전이 나올 때 각종 문서들이 제작됩니다. 개발이 시작될 때 요구사항 문서가 업데이트 됩니다. 기능/검증/회귀 테스트가 끝나면 각각에 대한 테스트 보고서가 만들어 집니다. 각 버전에 대한 정확한 테스트 보고서는 다음 버전들의 테스트 중 생기는 문제 해결에 중요한 역할을 하기 때문에 매우 중요합니다. 프로그램 매뉴얼과 튜토리얼이 한국어와 영문으로 업데이트 됩니다. 새 버전에 대한 Release Note가 만들어지고, baramcfd.org 페이지가 업데이트 됩니다. BARAM 소개 문서와 교육 자료 역시 업데이트 되고, 튜토리얼 동영상이 추가 되거나 업데이트 됩니다.
공개
프로그램 공개를 위해 설치 파일을 제작합니다. Windows와 MacOS 설치 파일을 제작하고, Linux 용 NextFOAM build와 Apptainer를 제작합니다. github 페이지를 업데이트 하고, Azure 클라우드의 마켓 플레이스에 새 버전 BARAM을 업로드합니다.
Linked, Reddit, Instagram 관련 내용을 게시하고, 뉴스레터를 통해 홍보합니다.
공개 현황 & 참여 방법
지난 2년간 누적 이벤트는 346,964, 누적 방문자는 114,571, 활성 사용자는 129개 나라의 10,817 정도가 됩니다.
BARAM 개발에 참여하는 방법은 다음과 같은 것들이 있습니다.
- 직접 사용하시면서 버그 리포트와 이슈 제기를 통해 프로그램을 발전시킬 수 있습니다.
- 넥스트폼과 공동으로 개발 프로젝트를 원하시면 언제나 환영입니다.
- 직접 개발하신 소스 코드를 제공해 주시면 너무 감사합니다.
- 직접 계산한 해석 사례를 공유해 주시면 저희 홈페이지에 게시하겠습니다.
github의 discussion, 넥스트폼 홈페이지의 Q&A, 이메일 등을 통해 문의 하실 수 있으며, subscription 계약을 통해 유지보수와 기술지원을 받을 수 있습니다. 넥스트폼의 정기 교육에 참가하실 수 있으며, 원하시면 온사이트 교육도 가능합니다.
맺음말
마지막으로 공개 소스 소프트웨어 사용을 통해 엔지니어링 솔루션에 대한 투자 방법을 바꿔 보시길 제안합니다.
상용 소프트웨어의 구매 혹은 임대 비용은 소프트웨어 사용 허가 비용, 유지보수 비용, 업그레이드 비용 등으로 구성됩니다. 반면 공개 소스 소프트웨어는 소프트웨어 사용 허가 비용이 없기 때문에 상대적으로 낮은 비용의 subscription 계약을 통해 서비스를 받을 수 있습니다. 그리고 남는 예산으로 프로세스 자동화나 맞춤형 프로그램 개발, HPC/Cloud/AI/DT 등에 투자할 수 있습니다.
감사합니다.