Jongsu Liam Kim | Blog

Fortran의 미래

오랫동안 Fortran이 망하기만을 고대해왔다. 일단 표준 한번 나오기까지가 너무 오랜 시간 걸릴뿐더러, 그게 각 컴파일러마다 반영되기까지 시간이 걸리기도 하고, 그렇다고 사람들이 새 기능을 빠르게 흡수하지도 않는다. 많은 Fortran 코드는 90/95가 많고 Fortran 77 코드가 아직도 현업에서 쓰이는 곳도 많다. Fortran도 나름 이런저런 개선을 한다고 하지만, 다른 언어에 비해 상당히 이질적인 문법을 가지고 있고 그럴 수 밖에 없어보인다. (i.e. OOP) 그리고 그 기능도 역시 다른 언어에 비해 제한적이다.

결국 답은 언어를 바꿔야한다라고 결론을 내렸지만, 실제 Legacy 코드를 뜯어고치기란 쉽지 않다. 나도 실패했다. 예전에는 Python과 C++, 최근에는 Julia를 해답으로 삼고 내가 쓰던 코드를 바꿔보려고 노력했고 남들에게도 권유했다. 그러나 Validation에서 문제가 생기거나 다른...

ANSYS Batch mode로 실행하기

내가 담당하는 일은 아니지만, 연구실에서 2년전부터 ANSYS(정확히는 ANSYS Fluent)를 사용하고 있다. 그동안의 사용방식은 GUI로 바로 실행하는 형태였는데, 효율적 HPC 자원 관리를 위해 잡스케줄러를 사용해서 batch mode로 전환하고자 한다.

ANSYS는 프로그램의 사이즈 치고는 공개된 문서가 찾기 힘들고 리셀러 홈페이지에서 문서보기도 좀 복잡하기도 해서 batch mode로 어떻게 실행하는지 알기가 힘들었다. 게다가 난 내 일도 아니라서 ANSYS를 잘 쓸 줄 몰라서 더더욱 알기 힘들었다. 우리 연구실은 SGE를 주로 쓰는데 ANSYS에서 GUI형태로 SGE Job submission을 지원하기는 하지만 queue나 parallel environment설정을 어떻게 하는지 몰라서 포기했기에 어쩔 수 없이 아래와 같은 텍스트 방식을 고집할 수 밖에 없었다.

참고로 이번에도 역시 나의 구세주 KISTI 매뉴얼

Environment Modules 사용하기

오랫동안 연구실에서 서버관리를 담당해왔다. 처음에는 단순 서버 on/off 정도만 하는 일이었는데, 별것도 아닌걸로 업체 통하면 시간도 오래걸리고 설명하기도 복잡하다보니 내가 처리하게 되었다. 그러다보니 점점 일이 늘어나서 서버 구축포함 대부분의 이슈를 내 선에서 해결하고자 노력하고 있다.

그런데 처음에는 다들 Fortran만 써서 상관없었지만 연구주제가 다양해지면서 다양한 환경을 구축할 필요가 생겼다. 다른 컴파일러, 다른 언어, 다른 서버 등등. 당연히 환경변수를 건드려야할 일이 많았다. 하지만, 유저들 대부분 환경변수가 뭔지도 모르는 사람들이다. 그래서 그동안 사용한 방법은 curl을 통해 미리 작성된 .bashrc를 받게 하는 것이었다. 디폴트 bashrc를 변경할 수도 있었겠지만, 상황에 따라 각자의 bashrc를 업데이트해야하는 경우도 생겨서 좀 더 안전하게 가려고 했다. 이 방법은 유연하게 대처하기...

비개발자들에게도 권하는 개발자 도구들

생각외로 많은 이공계 학생들이 프로그래밍을 못한다. CS가 아니면 대부분.. 특히 시뮬레이션 위주의 과학계산 연구를 하는 사람들도 알고리즘 자체는 복잡하지만 코드 아키텍처는 간단한 프로그래밍을 주로 한다. OOP니 FP니 없어도 Init - Read - Compute - Write 구조의 코드로 수십년동안 시뮬레이션 하는 경우도 있다. 오랫동안 대학원 생활을 하면서 이런 비 CS출신 이공계학생들을 보니 다음과 같은 특징이 있다는 걸 알게 되었다.

  • 그 전에는 코딩경험이 전무하거나, C/Fortran, 혹은 Matlab 문법 정도만을 안다.
  • 리눅스는 물론이고 CLI환경에 대해 익숙하지 않다.
  • 대부분 개발자 툴에 대해 모르거나 필요성을 느끼지 못한다.
  • 그렇다고 새로운 툴을 적극적으로 배우려고 하지 않는데, 그 이유는 지금쓰고 있는 정도로도 결과가 잘 나오기 때문이다. 즉,...

(Draft) External Forcing of Homogeneous Isotropic Turbulence

(This content is originally written by ‪Kyongmin Yeo’s manual)

Introduction

To maintain stationary turbulence, external force term is added to Navier-Stokes equation \[ \dfrac{d \hat{u}_i}{dt} = - i \kappa_{i} \hat{P} + \hat{H}_i - \nu \kappa^2 \hat{u}_i + \hat{f}_i \]

where \(\hat{f}_i\) is a external forcing term.

\(\hat{f}_i\) is defined as the projection of a vector \(\hat{\mathbf{b}}\) onto the plane normal to the wavenumber vector \(\mathbf{\kappa}\) to ensure divergence-free condition.

\[ \hat{f}_{i} = \hat{b}_{i} - \dfrac{\kappa_i}{\kappa^2} \kappa_j \hat{b}_{j} \]

So, how we define vector \(\hat{\mathbf{b}}\)? Eswaran & Pope suggested stochastic forcing. They define 3D complex vector \(\hat{\mathbf{b}}\) which is non-zero...