수치해석쪽에서 일하시는분 계십니까?

hormom의 이미지

안녕하세요

진로에 대해 고민이 있어 글을 써 봅니다.

조선,선박,해양쪽 전공을 하고있는 대학생입니다.

전자나 컴공 이런쪽이 아니라 프로그래밍에 대해서는 잘 모르지만

fortran, 수치해석 이런 과목을 듣다 보니 지금까지 배운 공식들을 구현해 낸다는것에 흥미를 느껴 공부를 하고있습니다.

이런곳에 계신분들께는 뭐 아직 엄청 초심자에 불과하겠지만

공업수학같은 수학과 컴퓨터 언어 (영어 공부도 해야겠지요) 등을 공부해서 관련된 일을 해보고 싶습니다..

유체역학 같은것도 공부를 하고있는데요 아직 수치해석이나 이러한 분야는 아직 발전 가능성이 크다고 들었거든요

방학때부터나 이런쪽으로 공부를 해보고 싶은데 리눅스 같은것도 해야하나요? 학과에서만 배우는 과정이 아닌

전문적으로 한번 배워보고싶은데 무엇부터 해야할지 막막합니다. CFD, 수치해석관련된 일을 하시는분들의 조언을 듣고싶습니다 ^^

hexagon의 이미지

저도 컴퓨터 전공자는 아닙니다 물론 아직 학부생이구요.

근데, 제 짧은 생각으론 수치해석이란게 컴퓨터 프로그래밍이 아니라는 생각으로 시작해야된다고 생각되는군요.
수치해석은 물리적현상을 컴퓨터 프로그램으로 만드는 학문이 아니기때문입니다.

수치해석은 해석적방법으로 풀수없는 문제를 수치적방법으로 푸는것을 말합니다.
한마디로 해석적방법을 프로그램으로 옮기는 능력이아니라.

수치적방법을 개발하고 이해하는 능력이 중요하겠죠.

수치적방법이 대량연산, 반복연산에 기초하기때문에 실무에서는 프로그래밍 언어라는 도구없이 적용되기는 힘들겠지만요...

결론은 컴퓨터가 필요하지만 그게 본질은 아니란거죠...

즉 컴퓨터의 OS나 언어가 중요한게 아니란거죠.

제 생각엔 수치해석적방법에만 집중하실거라면 Matlab와 같이 기본적인 수치해석적 도구를 많이 제공하는 툴을 이용해서 실무 문제를 해결해보는게 좋지 않을까 싶네요...

물론 충분한 배경지식이 있다면 수치적방법론을 떠나서 실무에 적용가능한 전용툴을 개발해 보는 것도 좋은 경험이 될거 같습니다.

mycluster의 이미지

제일 중요한 것은 물리적인 현상을 수학적인 식으로 모델링하는 능력이죠.

모델링 된 것을 프로그래밍하기 위해서는 프로그래밍에 대한 지식이 큰 도움이 되지만, 설사 그 능력이 없다고 해도, CFD나 computational physics에 관해서는 Tool이 워낙 잘 되어 있기 때문에, 상용 Tool을 잘 쓰는 것으로도 문제를 해결하는데 큰 무리가 없겠지요.

CFD분야의 상용툴은 대부분이제 완성되어 가는 단계고, 남아 있는 것은 기존의 상용툴에 UDF(User Defined Function)을 조합해서 상용툴로 풀기 힘든 문제를 푸는 단계가 대부분의 논문에서 행해지는 것이고, 상용툴로 되지 않는 것은 아직 이론이 정립되지 않았거나, Computation으로 해석하기 힘든(난해한) 문제들만 남았다는 것이 현실입니다.

툴이 없어서 못푸는 것이 아니라, 푸는 방법을 몰라서 툴을 사용하지 못하는 경우만 남아있다고 보면 됩니다.

넘버스를 유심히 보면, Computational Physics가 나아가야할 방향을 잘 알수 있죠.

래리 교수가 영감을 주면, 찰리가 모델링을 하고(기존의 식이나 이론을 참조하거나 변형해서), 아미타가 프로그램을 짜서 답을 구해주죠. 아미타가 옆에 있으면 찰리가 굉장히 답을 빨리 구할 수 있지만, 가끔은 래리가 한마디 해주지 않으면 찰리랑 아미타는 삽질을 하거나 다른 방향으로 가게 되죠.

조선/선박/해양을 한다면, 예를 들어서 스크류에 걸리는 Cavitation으로 인한 응력을 구하고 싶으면, 유체역학도 알아야하고, 난류모델링도 해야하고, Cavitation 모델도 필요한데, 이 세가지 뿐만 아니라, screw gemotry를 모델링해서, 돌아가는 스크류에서 발생한 turbulence와 cavitation의 조합으로, screw에 걸리는 구조적인 응력을 계산할 것인지를 봐야겠지요?

여기에서 현재 가장 안되어 있는 것이 cavitation이라고 보면 되겠죠. Tool이나 프로그램은 다 있어요. STAR-CD나 Fluent 사용하면 되는데, 여기에 UDF로 Cavitation을 넣어야하는데, Cavitation 모델링을 잘 하시면 됩니다.

교수님 말씀대로... physics를 잘 알도록하세요.

물론 프로그래밍 언어를 잘 익히면 엄청 도움이 됩니다. 남들이 Fortran을 numerical scripting language로 사용하고 있을 때, C/C++로 data structure를 동적으로 설계해서, 동일한 식을 훨씬 효율적으로 프로그래밍하는 것이 도움이 됩니다만, 굳이 그렇게 안해도 무식한 코드로 비싼 장비(슈퍼컴, 클러스터 등등)을 쳐발라서 돌려서 답을 구할 수도 있습니다. 그렇게 해서 좋은 논문 써도, 누가 프로그램 잘 못 짰다고 아무말 안하니까요.

수치해석 프로그램은 for loop하고 if 문만 있어도 짤 수 있으니까, 일단 학부때는 이론을 잘 익혀두세요. 프로그램은 돈 주고 시켜도 됩니다.

학부생한테는 할말이 많은데... 그래도 막막해 할테니, 학부때 해두면 도움이 될 만한 것으로

1. 편미분 방정식
- 물은 Elliptic Equation이 지배되는 영역이므로, Elliptic PDE 를 잘 이해하도록 수학공부 하기
- 요즘 배는 물과 공기를 다 지나가므로, 해수면을 잘 모델링 하기 위한 wave equation 공부 하기
- 근본은 Navier-Stokes Equation이므로, 일단 Navier-Stokes Equation을 봐야하고, viscous flow 이해하기

2. 수치해석
- 1번을 이해한 후 적당한 샘플 문제(아마 학부때 배우는 선박유체역학 등에 나오는 심플한 문제)를 모델링해서 풀어보기
- Numerical Recipi 같은 책 말고, Computation Fluid Dynamics 관련 책을 보고 프로그래밍 하기
- CFD 책을 볼때는 그 책이 항공과 용인지(Hyperbolic PDE만 주로 품), 기계과 용인지 (SIMPLE 만 죽어라고 가르침) 잘 판단해서 구할 것

3. 프로그래밍 언어 공부
- 포트란은 기존에 짜놓은 코드들이 많아서 최소한 보고 고칠려면 기본으로 알아둘 것 (Fortran 77이면 떡치고, 90이나 95를 알면 도움됨)
- C (C++ 말고) 익혀두기: 최근에 나오는 코드는 대부분 C로 만들고, UDF는 C로 짜는 것이 요즘 대세임

4. 리눅스나 Windows HPC Cluster 및 Job Scheduler 익혀두기
- 막상 프로그램 돌릴려면 컴퓨터를 잘 알아야 편하게 돌릴 수 있음. 대부분의 랩이나, 연구실에서는 클러스터를 사용하므로, 리눅스 클러스터 또는 윈도 클러스터, 여기에 사용되는 Job Scheduler는 알아둬야 편하게 돌림

5. 유체나 구조 툴 배워두기
- Fluent 등은 User Guide가 잘되어 있으므로, User Guide에서 샘플 문제 중에 학교에서 배운 비슷한 것을 따라 풀어보고 답을 보면 감 잡을 수 있음

할거 많죠???

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

bus710의 이미지

거... 거기까지;;

갠적으로 수학을 싫어해서 학부때 이론은 등한시하고 리눅스나 공부하겠다고 열심히 파다가
이제와서 대학원 진학하려고 수학 공부하고 있습니다...

리눅스던 윈도우즈던 그냥 도구일 뿐입니다.
mycluster님 말씀처럼 학부때 미리 저런 선견을 가지고 도전한다면
정말 많은 도움이 될 것 같습니다...

저도 한가지만 첨언하고자 하는데.....

짧은 시간 동안에 발생한 신호를 처리하는 것을 옆에서 지켜봤을 때,
정말 엄청난 스왑을 가져다가 쓰더군요.

한 20초짜리 신호인데 스왑이 10기가 정도....?
(물론 최적화 얘기가 나올 수도 있겠지만 제가 말씀드린 것은 상품화가 아니라, 일단 테스트 코드니까요.)

암튼, 일반 유저의 컴퓨팅을 위해서는 이미 현존하는 데스크탑으로 충분히 커버가 되지만
학술적 용도로는 부족한 편이죠...

그런 용도로 쓰는데 유닉스/리눅스가 유용한 편이라는 생각이 들곤 합니다.
매트랩도 유닉스/리눅스/맥 용이 있구요...

============================================

life is only one time

hexagon의 이미지

대부분 동의 합니다. 하지만, 제 전공이야기로 좀 넘어가자면,,,

원자력분야의 상용툴은 원전의 일부이기때문에(물론 다른 분야도 그럴겁니다만...) 기술 독립을 위해서 독자적인 코드를 개발하는 노력도 필요하다고 생각합니다.

이번에 아랍에밀리트에 수출한 원전도 사실 웨스팅하우스 사와 손잡고 들어간 이유가 몇몇 원천기술이 국산화되지 않았기 때문인데, 그중에 하나가 안전성 평가 시뮬레이터라는 군요.

원전에 심각한 구조적 손상이 발생했을때 미치는 영향을 시간에 따라 수치적 방법으로 평가하는 도구인데...

즉, 미래의 기술경쟁력을 갖추기 위해서, 해당 분야를 전공한 사람이 수치해석 (전용)툴을 설계하고 개발하는데 매니지먼트 할수있는 능력을 배양하는 측면에서 해당 분야의 전공자이면서, 수치해석 자체에 관심을 두는 분들을 격려할 필요도 있을거 같습니다...

쓰고 나서 보니까 그말이 그말인거 같긴한데...ㅎㅎㅎ
항상 원천기술은 아쉬운 부분이라...

johan의 이미지

뒤늦게 보았는데... 넘버스에 나오는 그런 인간 실제로 있더군요. 일상생활에서 돌아다니면서 보이는 것들이 바로 머리 속에서 숫자들과 연결되어 자신도 모르게 컴퓨팅하기 시작하는 인간. 동료중 하나가 그런 인간인데... 툴이 없어도 대략 머리 속에서 답이 있을 것이다 없을 것이다, 계산은 어떻게 해야 할 것이다 등등이 거의 순식간에 나옵니다. 괴물! 취미로 RC 비행기용 오토파일럿 만드는 인간.

yuni의 이미지

가볍게 들어 주십시요.

조선, 해양 분야가 전공이라고 하셨는데, 앞으로 이쪽으로 계속 일을 하실껀가요?
그렇다고 치고, 조선 해양 분야에서 일하는 사람들의 전공을 보시면,
아주 다양합니다. 기계공학, 전기, 화공 등등 무지무지 많습니다.

뒤집어서 생각을 해보면, 조선, 해양전공자의 잇점을 살리시는 것을 추천하고 싶습니다.
기초수치해석, 기초통계는 공대생이면 누구나 다 배운다고 봅시다. 공업수학도 그렇다고 봅시다.

그렇다면 결국, 본인만의 가치를 빛나게 할 부분은 부유체 운동, 해양파 이론, 저항론, 추진론 등등 조선공학이나 해양공학에서 배우는 내용을 자신의 것으로 만들면 됩니다.
다들 한다는 유체역학, 정역학, 동역학, 구조역학 등등 기본역학에 대한 이해 또한 높여야 됩니다.

==========================
부양가족은 많은데, 시절은 왜 이리 꿀꿀할까요?
=====================
"지금하는 일을 꼭 완수하자."

==========================
부양가족은 많은데, 시절은 왜 이리 꿀꿀할까요?
=====================
"지금하는 일을 꼭 완수하자."

mycluster의 이미지

학부때 저런 선견을 저도 갖고 있었다면, 지금 이렇게 안살겠죠.
매트랩도 병렬로 돌리도록 많이 해주고 있어요. 리눅스나 유닉스 보다는 이왕이면 이런 목적을 위해서는 High Performance Computing에 대해서 공부를 해두는 것은 도움이되죠.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

bus710의 이미지

한달조차 지나지 않아 매트랩으로 병렬 연산을 해보자는 얘기가 나왔네요;;

1. 매트랩2010a에 parallel toolbox가 있어 다행인데,
2. MDCS를 따로 구매하진 않을 것 같은 상황

이라...
문서를 통해 잡스케쥴러는 tourque, condor 등을 쓰고... matlab-MPI 라는 키워드도 입수는 했습니다.
다만... job을 실제로 처리할 worker를 MDCS 없이 사용할 방법이 있을까요?

즉, worker를 MDCS가 아닌 matlab2010a 나 여타 프로그램으로 구현할 방법이 있었으면 좋겠습니다.

혹시 힌트라도 주실 분 계실까요?

============================================

life is only one time

xmailmanx의 이미지

일단 매우 늦게 다는 코멘트 입니다만 ^^
아마 세일즈가 설명을 제대로 않해준 것이 아닌가 하는 생각이 듭니다
아마 제가 알기로는 Parallel Computing Toolbox만 사면 외부의 cluster는 사용할 수 없지만
요즘은 쿼드까지 나오니까 동일 머신에서만 worker를 4개까지 실행하는 것은 가능할 겁니다
물론 실제 외부 cluster와 MDCS를 써서 돌리는 것이 훨신 좋지만 가격적인 문제도 중요하니까
일단 Parallel Computing Toolbox만 사서 쿼드 이상급의 머신에서 돌려보고
추가 구매를 고려해 보는 것은 어떨까 싶습니다
대부분 단일 머신에서 않되니까 클러스터를 쓰는 것이겠지만
코딩은 단일 머신이 훨씬 쉽지 않을까 싶습니다
물론 MATLAB이 여타의 언어보다 훨신 쉽기는 쉽고
MATLAB의 모든 함수가 parallel computing을 지원하지는 않는것 같습니다

bus710의 이미지

앗, 감사합니다....^^
사실은 기존 시스템 구성 상, 자료 정리가 안되고 있어서 클러스터링은 차일피일 미루고 있었습니다.
적어주신 대로 일단은.... 멀티코어에서라도 열심히 써보고 결정해도 늦진 않을 것 같습니다^^

============================================

life is only one time

mycluster의 이미지

http://blogs.technet.com/b/jeraldc/archive/2009/10/14/matlab-7-8-0-r2009a-on-windows-hpc-server-2008.aspx

여기를 참조하세요. Windows HPC Server에서 작업하면 되는 듯 합니다. Windows HPC Server에는 기본적으로 Job Scheduler가 포함되어 있고, Matlab에서 CCS를 이용하면 되는 듯 하네요.

리눅스로 삽질하지 말고, 윈도우 쓰세요. Windows HPC Server는 학교에서 구매할 경우 34,000 (서버당, 부가별도) 입니다.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

bus710의 이미지

앗... 감사합니다...^^

각 노드에 있는 매트랩을 매트랩 워커가 아닌 일반 클라이언트로도 돌릴 수 있으면 꽤나 괜찮은 솔루션이 될 것 같습니다.
좀 더 내용을 살펴보고 댓글 달겠습니다...^^

============================================

life is only one time

bus710의 이미지

음... ㅎㅎ
매트랩 서버의 견적서를 받아보니 그럭저럭 사정권 안에 드는 가격인것 같습니다.
매트랩 서버의 스케쥴러와 말씀하신 CCS의 벤치마크한 결과를 찾아봐야 겠습니다...
감사합니다^^

============================================

life is only one time

xbroyw의 이미지

학부생이며 아직 군대갔다오지 않았다는 전제로(왠지 그래보여서...) 말씀드립니다.
전역했다고 별로 달라지지는 않습니다. 참고로 저는 대학에서 일하기 때문에
주변에 많은 학생들이 고민하고 있는 부분이라 반가운 마음에 몇자 적습니다.
저는 프로그래밍과 별반 상관없습니다.

1. 대학원이 대수는 아닙니다만 공부에 관심을 가지게 되었다면
관련 대학원 연구실이나 교수님을 찾아뵙고 상의를 하는게 가장 현명한 방법입니다.
그 연구실이 나의 꿈과 이상과 맞는지는 어떻게 아느냐?
보통은 홈페이지에서 보여주는 몇가지 그림으로 판단하기 쉬운데
그것보다 더 중요한 것은 그 연구실/교수님의 연구 성과, 곧 프로젝트와 논문을 찾는 것 입니다.
교수님의 논문은 학교 도서관 홈페이지나 스칼라 구글 혹은 국회도서관 등을 이용하시면 편리합니다.

2. 그러면 알게 되겠지만 사실 지금 내가 생각하는 그 몇가지 수업, 프로그래밍 스킬과 더불어
더 중요한 것은 내가 이것에 흥미를 느끼고 있는가의 점검이 병행되어야 할 것입니다.
자꾸 대학원을 들먹이게 되는데 사실 대학원에 가지 않더라도
하고 싶은 공부를 할 수 있는 방법은 있겠죠. 특히 언급한 수식을 프로그래밍 언어로
실행시키는 재미는 여러 연구실에서 절실하게 필요로 하는 테크니션의 필수 조건이죠.
대학뿐 아니라 여러 국책 연구실에서도 마찬가지입니다.
관심이 있는 분야에서 일하는 선배를 찾아가서 아양을 떨며 아르바이트를 시도하는 것도
분위기 적응 및 내공을 쌓는 좋은 기회가 될 수 있습니다.

3. 사실 위에서 언급된 CFD, 수치해석은 좋은 상용프로그램 및 오픈소스가 이미 존재하고 있습니다.
http://imechanica.org/
이곳에 가시면 기대이상의 정보를 얻을 수 있을 것입니다.

4. 따라서, 동어반복일지 모르겠지만
공부하고 싶다는 마음이 있다면 작은 것 부터 차근차근 열심히 하시고
특히 수업듣는 과목의 숙제는 철저히 끝까지 완성하겠다는 노력이 필요하겠죠.
그리고, 어떤 플러스 알파가 필요한지 늘 염두에 둔다면 제대로 길을 갈 수 있을 것으로 판단됩니다.
아자아자...!!

-------
good job :)
-------

-------
good job :)
-------

jw8704의 이미지

다른 대학교들 (명문대 포함) 해서 커리큘럼(교과과정)을 참조해보실것을 추천드립니다.

1학년부터해서 고학년까지 어떤식으로 교과과정이 전개되는지 한번 참조해보세요.

그리고 그교과과정 수업계획서를 구할수있다면 어떤 교재를 사용하는지도 알아보시구요.
(단, 어떤 과목에 강의교재로 선택된것이 반드시 좋은 교재는 아닐수도있어요, 학교마다 교수가아닌 재단이나 이런곳에서 교재를 선택하는경우 여러 이해관계에 의해 좋은 교재가아닌 것이 선택되는 경우도있거든요.. 그러니 교재를 알아볼때는 네이버 지식인 등에서 바이블 같은 단어를 포함해서 검색해보시는것도 추천드립니다.)

지금 생각하시는 여러가지 공부방법들이 어쩌면 대학교 커리큘럼을 보시면 '그안에 체계적으로 여우같이 정리되어있다는것을 느끼실수도있을거에요'

커리큘럼을 참조하시고 자신의 의견을 덧붙여서 공부하시는걸 추천드립니다.

단 커리큘럼은 그 기간을 단축하는것이 어려워요.. 4년과정 커리큘럼이라면 정말 4년 이상이 들어야할수도있는것같음..

아, 그리고 윗분중에 말씀하신 분들이계시지만, 저 또한 수치해석은 프로그래밍이아닌 학문적인 측면으로 접근해야 한다고 생각합니다.
수치해석은 수학적인 문제를 프로그래밍으로 푸는것이아니예요.. 프로그래밍을 배우는 과목이아닌, 어떤 수학적인 해를 수치적인 방법으로 구하는 것을 말하는데 , 프로그래밍은 단순히 도구로 이용되는거예요.

그럼 이만..