지식나눔

포트란 프로그래밍에 관해 여쭤봅니다.

포트란으로 수치분석을 하고 있습니다. 몇 가지 궁금한 게 있어서 글 적습니다. 1) 현재 포트란 77로 코딩하고 있습니다. 같은 프로그램을 포트란 90으로 짜면 성능이 향상될까요? 계산이 더 빨리 된다던가 그런 거요. 2) 비주얼 포트란6.0으로 코딩할 때는 내장된 IMSL 라이브러리를 이용할 수 있는데요. 이 프로그램을 보면 포트란 77 용과 포트란 90 용 IMSL 라이브러리가 따로 있더군요. 포트란 77에서 미방을 풀 때 쓰는 ivpag 라이브러리에 대응되는 것이 포트란 90에도 있나요? 있다면 이름이 어떻게 되는지요? 들여다 봐도 잘 모르겠어서요. 3) 가장 중요한 건데요. 미분 방정식의 초기 조건을 외부의 파일에서 불러와서 지정해 주는 건 어떻게 하는 건가요? 가령, B(n)(x) (n=0, 1, 2, ..., 20)에 관한 미방을 풀 때 각 항의 초기 조건 B(n)(0)을 B(n)(0)=y(n)가 되도록 y(n)의 값을 담고 있는 외부 DAT 파일을 열어서 지정해 주는 방법이요. Open 문을 써야 할 것 같은데 어떻게 구현하는 것인지 잘 모르겠습니다. 질문이 너무 구체적인 건 아닌지 모르겠네요. 도움 부탁드립니다.
  • fortran
  • numerical analysis
  • imsl
지식의 출발은 질문, 모든 지식의 완성은 답변! 
각 분야 한인연구자와 현업 전문가분들의 답변을 기다립니다.
답변 2
  • 답변

    이응신님의 답변

    포트란은 수치해석을 목적으로 고안된 고차원 프로그래밍 언어로 아직도 여전히 이공계 과학기술자들에게 사랑받고 있는 언어입니다. 포트란 77은 ANSI 표준, 포트란 90은 ISO/ANSI 표준이 있습니다. 왜 프로그래밍언어가 버전이 다른가를 주목해주시면 답이 나올 듯 합니다. 프로그래밍 언어가 버전업이 될때는 하드웨어의 발전 때문에 실행라이브러리를 해당 컴퓨터에 맞게 개선을 해야 하는 이유도 있고, 프로그래밍 언어의 버그가 발견이 되어 고칠 때 등 여러 이유가 있습니다. 그러나 포트란 77이 90으로 바뀐 가장 큰 이유는 객체지향형 언어인 C++와 비슷한 문법구조를 갖추기 위해서입니다. 그래서 요즈음 나오는 언어들의 구조는 거의 다 C++와 비슷한 언어를 가지고 있습니다. 포트란 77에 익숙해져 있다면 억지로 90으로 바꿀 필요가 없습니다. 물론 C++의 객체지향형 언어에 익숙해있다면 90으로 바꾸어 다시 프로그래밍을 할 수 있습니다. 어차피 77도 병렬처리가 가능하기 때문에 속도면에서는 두 개가 그렇게 차이가 나지 않을 것입니다. 대형 프레임에서 포트란으로 컴파일 할 때 옵션을 보면 전통적인 포트란 컴파일, 병렬처리 컴파일 등을 선택하도록 하고 있습니다. 포트란 90을 배워서 제대로 프로그래밍하려면 차라리 C/C++를 배워서 객체지향형 언어로 짜는 것이 좋습니다. 그렇지 않으면 77로 프로그래밍을 해도 컴파일러가 알아서 해주므로 큰 차이가 없을 겁니다. 포트란 77을 아직도 사용하고 있는 이유는 수십년에 걸친 라이브러리가 풍부하기 때문입니다. 이런 라이브러리를 사용할 생각이 없고 자신이 직접 짠다면 엄청난 시간이 걸리고 프로그램이 실행되는 루틴도 비효율적일 것입니다. 프로그래밍언어 중 서툴게, 또는 엉성하게 짠 C++는 기존의 C와 다를바가 없다는 말이 있으므로 포트란 90으로 힘들게 고생하면서 짤 필요는 없습니다. 물론 객체지향형 언어에 통달을 하고 있다는 90으로 짜고 기존의 라이브러리를 그대로 불러오도록 할 수 있습니다. * 그리고 이런 말을 해서 미안합니다만... 자신이 직접 프로그래밍을 한다면 나중에 결과를 발표해도 다른 사람들에게 신뢰를 얻기 어렵습니다. (전문 프로그래머가 아니면) 따라서 포트란과 C++의 구조와 비슷한 매트랩을 사용하시기를 권합니다. 프로그래밍하는 과정이 거의 수치해석하는 것과 같고 알고리듬을 블록 다이어그램으로 그려도 계산 결과에 대해 의심을 하는 사람이 별로 없습니다. 또 그래픽으로 결과를 표시할 때도 쉽고 시물링크로 실시간 실행도 가능합니다. >포트란으로 수치분석을 하고 있습니다. 몇 가지 궁금한 게 있어서 글 적습니다. >1) 현재 포트란 77로 코딩하고 있습니다. 같은 프로그램을 포트란 90으로 짜면 성능이 향상될까요? 계산이 더 빨리 된다던가 그런 거요. >2) 비주얼 포트란6.0으로 코딩할 때는 내장된 IMSL 라이브러리를 이용할 수 있는데요. 이 프로그램을 보면 포트란 77 용과 포트란 90 용 IMSL 라이브러리가 따로 있더군요. 포트란 77에서 미방을 풀 때 쓰는 ivpag 라이브러리에 대응되는 것이 포트란 90에도 있나요? 있다면 이름이 어떻게 되는지요? 들여다 봐도 잘 모르겠어서요. >3) 가장 중요한 건데요. 미분 방정식의 초기 조건을 외부의 파일에서 불러와서 지정해 주는 건 어떻게 하는 건가요? 가령, B(n)(x) (n=0, 1, 2, ..., 20)에 관한 미방을 풀 때 각 항의 초기 조건 B(n)(0)을 B(n)(0)=y(n)가 되도록 y(n)의 값을 담고 있는 외부 DAT 파일을 열어서 지정해 주는 방법이요. Open 문을 써야 할 것 같은데 어떻게 구현하는 것인지 잘 모르겠습니다. > >질문이 너무 구체적인 건 아닌지 모르겠네요. 도움 부탁드립니다. >
    포트란은 수치해석을 목적으로 고안된 고차원 프로그래밍 언어로 아직도 여전히 이공계 과학기술자들에게 사랑받고 있는 언어입니다. 포트란 77은 ANSI 표준, 포트란 90은 ISO/ANSI 표준이 있습니다. 왜 프로그래밍언어가 버전이 다른가를 주목해주시면 답이 나올 듯 합니다. 프로그래밍 언어가 버전업이 될때는 하드웨어의 발전 때문에 실행라이브러리를 해당 컴퓨터에 맞게 개선을 해야 하는 이유도 있고, 프로그래밍 언어의 버그가 발견이 되어 고칠 때 등 여러 이유가 있습니다. 그러나 포트란 77이 90으로 바뀐 가장 큰 이유는 객체지향형 언어인 C++와 비슷한 문법구조를 갖추기 위해서입니다. 그래서 요즈음 나오는 언어들의 구조는 거의 다 C++와 비슷한 언어를 가지고 있습니다. 포트란 77에 익숙해져 있다면 억지로 90으로 바꿀 필요가 없습니다. 물론 C++의 객체지향형 언어에 익숙해있다면 90으로 바꾸어 다시 프로그래밍을 할 수 있습니다. 어차피 77도 병렬처리가 가능하기 때문에 속도면에서는 두 개가 그렇게 차이가 나지 않을 것입니다. 대형 프레임에서 포트란으로 컴파일 할 때 옵션을 보면 전통적인 포트란 컴파일, 병렬처리 컴파일 등을 선택하도록 하고 있습니다. 포트란 90을 배워서 제대로 프로그래밍하려면 차라리 C/C++를 배워서 객체지향형 언어로 짜는 것이 좋습니다. 그렇지 않으면 77로 프로그래밍을 해도 컴파일러가 알아서 해주므로 큰 차이가 없을 겁니다. 포트란 77을 아직도 사용하고 있는 이유는 수십년에 걸친 라이브러리가 풍부하기 때문입니다. 이런 라이브러리를 사용할 생각이 없고 자신이 직접 짠다면 엄청난 시간이 걸리고 프로그램이 실행되는 루틴도 비효율적일 것입니다. 프로그래밍언어 중 서툴게, 또는 엉성하게 짠 C++는 기존의 C와 다를바가 없다는 말이 있으므로 포트란 90으로 힘들게 고생하면서 짤 필요는 없습니다. 물론 객체지향형 언어에 통달을 하고 있다는 90으로 짜고 기존의 라이브러리를 그대로 불러오도록 할 수 있습니다. * 그리고 이런 말을 해서 미안합니다만... 자신이 직접 프로그래밍을 한다면 나중에 결과를 발표해도 다른 사람들에게 신뢰를 얻기 어렵습니다. (전문 프로그래머가 아니면) 따라서 포트란과 C++의 구조와 비슷한 매트랩을 사용하시기를 권합니다. 프로그래밍하는 과정이 거의 수치해석하는 것과 같고 알고리듬을 블록 다이어그램으로 그려도 계산 결과에 대해 의심을 하는 사람이 별로 없습니다. 또 그래픽으로 결과를 표시할 때도 쉽고 시물링크로 실시간 실행도 가능합니다. >포트란으로 수치분석을 하고 있습니다. 몇 가지 궁금한 게 있어서 글 적습니다. >1) 현재 포트란 77로 코딩하고 있습니다. 같은 프로그램을 포트란 90으로 짜면 성능이 향상될까요? 계산이 더 빨리 된다던가 그런 거요. >2) 비주얼 포트란6.0으로 코딩할 때는 내장된 IMSL 라이브러리를 이용할 수 있는데요. 이 프로그램을 보면 포트란 77 용과 포트란 90 용 IMSL 라이브러리가 따로 있더군요. 포트란 77에서 미방을 풀 때 쓰는 ivpag 라이브러리에 대응되는 것이 포트란 90에도 있나요? 있다면 이름이 어떻게 되는지요? 들여다 봐도 잘 모르겠어서요. >3) 가장 중요한 건데요. 미분 방정식의 초기 조건을 외부의 파일에서 불러와서 지정해 주는 건 어떻게 하는 건가요? 가령, B(n)(x) (n=0, 1, 2, ..., 20)에 관한 미방을 풀 때 각 항의 초기 조건 B(n)(0)을 B(n)(0)=y(n)가 되도록 y(n)의 값을 담고 있는 외부 DAT 파일을 열어서 지정해 주는 방법이요. Open 문을 써야 할 것 같은데 어떻게 구현하는 것인지 잘 모르겠습니다. > >질문이 너무 구체적인 건 아닌지 모르겠네요. 도움 부탁드립니다. >
    등록된 댓글이 없습니다.
  • 답변

    박종원님의 답변

    위의 eisenbahn님이 첫번째 질문에 대한 답변을 잘 해 주셔서 3번째 답변을 올립니다. 저도 이전에 FORTRAN을 사용한 적이 있지만 추세가 객체지향 언어로 이동하고 있으며 실시간 운동등을 모사하는데 오히려 C++ 이 좋을 것 같습니다. 두번째 질문은 라이브러리 내용이므로 비슷한 것을 찾으면 분명히 있습니다. 예를 들면 initial value problem (IVP) 문제에 대한 라이브러리는 다음 사이트의 view source code 를 보시면 사용하고 있음을 알 수 있습니다. http://www.zib.de/Numerik/numsoft/CodeLib/ivpode.en.html 세번째 질문의 답변입니다. OPEN statement 는 외부 데이타를 가져와 계산에 이용하는 것으로서 정확하게 코딩을 해 주지 않으면 조금 복잡합니다.그래서 오히려 READ statement 을 사용하는 것이 훨씬 효과적입니다. http://dirac.uos.ac.kr/lang/dec_fortran/lrm0476.htm http://blog.naver.com/moys79?Redirect=Log&logNo=110004546978 (이곳에 비교 설명이 잘 되어 있습니다.) 어차피 초기값을 주는 경우인데 초기값을 잘못 입력하여 Overflow 또는 Logic error 나는 것 보다 미리 예상 가능한 값을 읽어 바로 계산에 응용하는 것이 효과적이라는 얘기입니다. 특히 미분방정식이나 편미분 방정식을 프로그램밍할때 특히 주의해야 합니다. IVP 나 BVP ODE 또는 PDE 프로그램은 주의할 필요가 있습니다. 관련 URL 에 READ 문과 OPEN 문으로 프로그램밍 된 것은 참조하여 코딩하는데 도움이 되길 바랍니다. 화학반응식의 방정식을 프로그램밍한 것은 아래 사이트를 참고하세요(OPEN 문 이용) http://www.zib.de/Numerik/numsoft/CodeLib/codes/larkin_3.1/lmain.f 그리고 참고로 요즈음은 굳이 프로그래밍 하지 않고도 바로 입력하여 수치해석 할 수 있는 software(예.MATLAB)가 나와 있습니다. 그러나 한번은 원리를 익히기 위하여 코딩하여 실행해 보는 것도 좋은 경험이 될 수 있습니다. >포트란으로 수치분석을 하고 있습니다. 몇 가지 궁금한 게 있어서 글 적습니다. >1) 현재 포트란 77로 코딩하고 있습니다. 같은 프로그램을 포트란 90으로 짜면 성능이 향상될까요? 계산이 더 빨리 된다던가 그런 거요. >2) 비주얼 포트란6.0으로 코딩할 때는 내장된 IMSL 라이브러리를 이용할 수 있는데요. 이 프로그램을 보면 포트란 77 용과 포트란 90 용 IMSL 라이브러리가 따로 있더군요. 포트란 77에서 미방을 풀 때 쓰는 ivpag 라이브러리에 대응되는 것이 포트란 90에도 있나요? 있다면 이름이 어떻게 되는지요? 들여다 봐도 잘 모르겠어서요. >3) 가장 중요한 건데요. 미분 방정식의 초기 조건을 외부의 파일에서 불러와서 지정해 주는 건 어떻게 하는 건가요? 가령, B(n)(x) (n=0, 1, 2, ..., 20)에 관한 미방을 풀 때 각 항의 초기 조건 B(n)(0)을 B(n)(0)=y(n)가 되도록 y(n)의 값을 담고 있는 외부 DAT 파일을 열어서 지정해 주는 방법이요. Open 문을 써야 할 것 같은데 어떻게 구현하는 것인지 잘 모르겠습니다. > >질문이 너무 구체적인 건 아닌지 모르겠네요. 도움 부탁드립니다. >
    위의 eisenbahn님이 첫번째 질문에 대한 답변을 잘 해 주셔서 3번째 답변을 올립니다. 저도 이전에 FORTRAN을 사용한 적이 있지만 추세가 객체지향 언어로 이동하고 있으며 실시간 운동등을 모사하는데 오히려 C++ 이 좋을 것 같습니다. 두번째 질문은 라이브러리 내용이므로 비슷한 것을 찾으면 분명히 있습니다. 예를 들면 initial value problem (IVP) 문제에 대한 라이브러리는 다음 사이트의 view source code 를 보시면 사용하고 있음을 알 수 있습니다. http://www.zib.de/Numerik/numsoft/CodeLib/ivpode.en.html 세번째 질문의 답변입니다. OPEN statement 는 외부 데이타를 가져와 계산에 이용하는 것으로서 정확하게 코딩을 해 주지 않으면 조금 복잡합니다.그래서 오히려 READ statement 을 사용하는 것이 훨씬 효과적입니다. http://dirac.uos.ac.kr/lang/dec_fortran/lrm0476.htm http://blog.naver.com/moys79?Redirect=Log&logNo=110004546978 (이곳에 비교 설명이 잘 되어 있습니다.) 어차피 초기값을 주는 경우인데 초기값을 잘못 입력하여 Overflow 또는 Logic error 나는 것 보다 미리 예상 가능한 값을 읽어 바로 계산에 응용하는 것이 효과적이라는 얘기입니다. 특히 미분방정식이나 편미분 방정식을 프로그램밍할때 특히 주의해야 합니다. IVP 나 BVP ODE 또는 PDE 프로그램은 주의할 필요가 있습니다. 관련 URL 에 READ 문과 OPEN 문으로 프로그램밍 된 것은 참조하여 코딩하는데 도움이 되길 바랍니다. 화학반응식의 방정식을 프로그램밍한 것은 아래 사이트를 참고하세요(OPEN 문 이용) http://www.zib.de/Numerik/numsoft/CodeLib/codes/larkin_3.1/lmain.f 그리고 참고로 요즈음은 굳이 프로그래밍 하지 않고도 바로 입력하여 수치해석 할 수 있는 software(예.MATLAB)가 나와 있습니다. 그러나 한번은 원리를 익히기 위하여 코딩하여 실행해 보는 것도 좋은 경험이 될 수 있습니다. >포트란으로 수치분석을 하고 있습니다. 몇 가지 궁금한 게 있어서 글 적습니다. >1) 현재 포트란 77로 코딩하고 있습니다. 같은 프로그램을 포트란 90으로 짜면 성능이 향상될까요? 계산이 더 빨리 된다던가 그런 거요. >2) 비주얼 포트란6.0으로 코딩할 때는 내장된 IMSL 라이브러리를 이용할 수 있는데요. 이 프로그램을 보면 포트란 77 용과 포트란 90 용 IMSL 라이브러리가 따로 있더군요. 포트란 77에서 미방을 풀 때 쓰는 ivpag 라이브러리에 대응되는 것이 포트란 90에도 있나요? 있다면 이름이 어떻게 되는지요? 들여다 봐도 잘 모르겠어서요. >3) 가장 중요한 건데요. 미분 방정식의 초기 조건을 외부의 파일에서 불러와서 지정해 주는 건 어떻게 하는 건가요? 가령, B(n)(x) (n=0, 1, 2, ..., 20)에 관한 미방을 풀 때 각 항의 초기 조건 B(n)(0)을 B(n)(0)=y(n)가 되도록 y(n)의 값을 담고 있는 외부 DAT 파일을 열어서 지정해 주는 방법이요. Open 문을 써야 할 것 같은데 어떻게 구현하는 것인지 잘 모르겠습니다. > >질문이 너무 구체적인 건 아닌지 모르겠네요. 도움 부탁드립니다. >
    등록된 댓글이 없습니다.