수치 해석 solver – Sundials

  • #3510312
    engineer 72.***.55.148 923

    안녕하세요

    회사에서 수치해석 관련 일을 요즘 많이 합니다. MATLAB을 이용하여 multi-domains, multi-physics PDE 문제를 DAE solver 를 이용 finite difference or finite volume method 로 많이 푸는데요, 요즘 python 에 관심이 많습니다. 머신 러닝 이용해서 data 가지고 modeling / prediction 하는것도 틈틈히 하고 있구요.

    그런데 python 가지고 PDE 문제를 풀려고 하니 아직 좋은 툴이 없더라구요. 찾아본 결과 sundials 이라고 하는 오픈 소스 수치해석 솔버가 있는데 이게 C 로 짜여져 있어서 바로 python에서는 적용할 수가 없고 몇몇 그룹들이 wrapper or binding (?) 같은 걸 만들어서 python에서 쓰게끔 했는데 이게 윈도우하고 잘 안 맞더라구요. 인스톨도 안되고 전부 linux 계열 컴퓨터용으로 개발 되어서.

    https://computing.llnl.gov/projects/sundials
    https://scikits-odes.readthedocs.io/en/latest/index.html

    제가 컴퓨터 공학자가 아니라서 그런데 혹시 개인적으로 이런 wrapper 같은 거 만들려면 어디부터 시작해야 하는지요? 좀 뜬금없는 질문인 거 같기도 한데 주위에 컴퓨터 전공자가 없어서 여기라도 한번 남겨봅니다.

    그럼 수고하세요.

    • pde 47.***.232.141

      컴공이 아니라 물리나 응용수학쪽 사람들이 더 잘할 것 같네요.
      리눅스로 그냥 해요. 왜 굳이 윈도우를 고집하시는지?

    • cfd 172.***.252.40

      그쪽 분야시면, 그냥 C 나 Fortran 사용하시는게 낫지 않나요?
      Python이 아무리 빨라졌던들 C나 포트란보다 느릴텐데요.

    • engineer 72.***.55.148

      답변 감사합니다. 회사에 리눅스가 없습니다. IT 계열회사가 아니라 그런가 봅니다. 제안해도 담당자들은 별 반응이 없네요.
      시뮬레이션 문제가 변수가 몇개 없거나 간단한 문제면 (학교에서 배우는 간단한 예제) 그냥 C로 짜여진거 하겠는데 physical domain이 여러개거나 풀어야할 PDE 가 많거나 이려면 C를 많이 배운 사람이 아니면 쉽지가 않네요. 가장 결정적인건 Jacobian을 구해야 하는데 sundials 솔버는 그 기능이 없습니다. 유저가 손으로 구하든 컴퓨터로 구하든 주어야할 인풋인데 문제가 복잡해지면 이거 구하는게 쉽지가 않습니다. Matlab은 솔버가 알아서 계산해서 사용자가 할 필요가 없거든요. 또 Jacobian을 구할 수 있게 casadi 라고 하는 오픈소스가 있는데 이게 Matlab 하고 python에서 잘 돌아갑니다.

    • 174.***.18.100

      저도 그런 경우가 잦아서 c로 DLL을 만든다음 python에서 import 해서 쓰도록 했어요. 연산량이 많은 경우 저는 주로 C/C++ 를 사용하기에 그리고 파이썬이 잡다한 운영환경을 개발하기에 편해서 좋은 조합인거 같습니다. 게다가 DLL 모듈화 시키면 나중에 다른 환경에 포팅하기도 편하고요. 인터넷에서 좀 찾으시면 DLL/SO만드는건 한두시간이면 하실수 있을거에요.

      • engineer 72.***.55.148

        고맙습니다. 한번 찾아봐야겠네요.

    • 174.***.18.100

      아참, 그런건 스택 오버플로우 같은데서 찾아보세요.

    • 지나가다 129.***.150.136

      matlab에서도 C/ㅊ++로 짠 코드를 불러서 사용할 수 있습니다.