OOP와 함께 최신 Fortran을 사용하는 오픈 소스 과학 라이브러리가 있습니까?


14

지난 몇 달 동안 특정 PDE 시스템을 해결하기위한 Fortran 프로그램을 코딩하는 데 보냈습니다 (유체 흐름 / 연소 설명). 최신 표준 포트란과 최신 포트란의 새로운 OOP 기능을 사용하려고했습니다. 나는 내 자신을 위해 일하고 있으며 내 옆에 Fortran 전문가가 없어서 질문을 할 수 없기 때문에 나에게 배울 수있는 타고난 방법은 현대 Fortran을 사용하는 다른 라이브러리 / 솔버를 보는 것입니다.

불행히도 모든 Fortran 라이브러리는 꽤 오래된 Fortran, Fortran90 top으로 작성된 것으로 보입니다. 그러므로 나는 클래스 디자인과 상호 작용을 생각해야했다. 그리고 나는 특히 올바른 관점에서 보았을 때 내가 올바른 일을 한 것은 아닙니다. 그러나 아마도 내가 놓친 부분이 있으며 Fortran 및 OOP를 사용하는 경우 현대 과학 패키지가 작성되어 있습니까?

많은 훌륭한 C ++ 라이브러리 (OpenFOAM, deal.II 등)와 Python 라이브러리에서 배울 수 있습니다. 이 언어들은 일반적으로 더 큰 공동체를 가지고 있습니다. 예를 들어 배우고 싶다면 포트란을 없애고 언어를 바꾸는 것이 더 낫습니까?


잭, 귀하의 의견이 너무 큰 것 같습니다 : "(이 의견의 나머지 부분은 길이 요구 사항을 충족하는 것입니다." "). 내 안에 희망이 생겨서 모두가 읽을 수 있도록 편집 해주세요. : D.
tiam

2
죄송합니다. 마지막 질문에 대한 답변으로 오해의 소지가있었습니다. 본격적인 라이브러리에서 예를 들어 최신 OOP를 배우려면 C ++을 사용하는 것이 좋습니다. 죄송합니다; 나는 현대적인 Fortran 라이브러리 중 최고의 오픈 소스를 모른다.
잭 폴슨 17 년

6
C ++은 이미 약간 객체 지향의 화신이었고 많은 라이브러리가 그것을 잘못 오용한다고 경고합니다 (모든 언어에 해당). Fortran을 넘어 보는 것이 중요하지만 C ++을 넘어 보는 것도 중요하다는 데 동의합니다. "실제"작업을 위해 C와 같은 간단한 언어로 돌아와도 여러 종류의 언어 (개체 지향, 일반 및 기능적, 정적 및 동적)로 개념을 표현하는 방법을 배우는 것이 좋습니다.
Jed Brown

답변:


10

살펴볼 수있는 최신 CFD 코드가 있습니다. 예를 들어 ...

유동성 : 범용 다상 CFD (FE) 코드; 완전히 구조화되지 않은 AMR도

WRF : NCAR의 차세대 수치 모델 기상 예측 시스템

코드 Saturne : 범용 CFD (FV) 코드; Wikipedia에 나열된 일부 기능

구조 분석을위한 유사한 현대 포트란 코드가 있습니다.

그러나 광범위한 컴파일러 지원이 없기 때문에 전체 F2003 기능을 사용하지 못할 수 있습니다. 대부분의 새로운 컴파일러는 F2003의 많은 부분을 지원하지만 (AMC SIGPLAN Fortran 포럼 논문 참조) 광범위한 사용자 기반을 확보하는 데 시간이 걸립니다. 예를 들어 데비안 스 테이블은 GCC 4.4.5를 가지고 있으므로 일반적으로 사용자가 더 나은 것을 기 대해서는 안됩니다 (예 : 4.5 / 4.6 / 4.7).

F2003 컴파일러가 널리 보급되면 F2003 기능을 사용하는 라이브러리 / 코드가 표시됩니다.

지금 은 Damian Rouson이 OOP 기능을 사용하는 방법에 대한 이 을 볼 수 있습니다 .


맞습니다. F2003은 최근에 따라 잡고 있습니다 (내 라이브러리의 경우 최대 이식성을 위해 F95를 사용하기로 결정했습니다). F2003 또는 F2008로 작성된 더 많은 코드를 곧 보게 될 것입니다.
Ondřej Čertík

아주 좋은 지적입니다. 앞으로 몇 년 안에 새로운 표준 코드가 더 많이 나오기를 바랍니다.
tiam

데미안 Rouson는 작동 ForTrillinos 받는 현대 포트란 인터페이스, Trillinos 프로젝트 .
Jeremy Kozdon

7

이 예에서 배우고 싶다면 나는 추천 rosettacode , 프로그래밍 chrestomathy 사이트를. 거기에는 상당히 다른 언어로 비교적 많은 예제 문제가 있습니다.

아마도 더 흥미로운 것은 Fortran Wiki 일입니다.것입니다. 유용 할 수 있습니다 포트란에서 OOP에 대한 섹션입니다.

포탄은 잘하고 있습니다-포기하지 마십시오!


나는 포트란을 좋아한다 :). 나는 Wiki 웹 사이트를 알고 있습니다. Matcalds 서적은 PGI의 자습서뿐만 아니라 매우 좋습니다. 그러나 실제 자료를 보는 것이 좋을 것입니다!
tiam

dolfyn CFD 코드 의 코딩 스타일 은 실제로 포괄적이고 "현대 포트란 리터 러 "입니다. 여기에는 정보를 제공 할 수있는 링크 된 목록 등과 같은 일부 데이터 구조의 예와 올바르게 기억하면 약간의 OOP가 있습니다.
존 트라 볼타

4

@JackPoulson의 의견에 동의합니다. 현대 Fortran으로 작성된 오픈 소스 라이브러리를 알지 못합니다. 따라서 예제를 통해 배우기 위해 C ++로 전환해야한다는 특정 질문에 대한 대답은 불행한 "예"입니다. 그러나 분명히, 나는 현대 Fortran에서 거의 독점적으로 작성된 OOP에 대한 시각으로 적어도 하나의 라이브러리가 존재한다는 것을 알고 있으므로 가능합니다 (그리고 가치가 있습니다). 이 라이브러리는 오픈 소스가 아니므로 학습 목표를 달성하는 데 도움이되지 않습니다.

그러나 이미 완료 한 것을 버리는 것을 꺼려 할 수도 있습니다. 이를 위해 Fortran을 추구하는 데 여전히 관심이 있고 특정 개발 질문이있는 경우 StackOverflow에 문의하십시오. 기꺼이 도와 줄 수있는 숙련 된 Fortran 개발자가 몇 명 있습니다.


3

나는 이것에 조금 늦었지만 상속 및 다형성과 같은 현대의 포트란 기능을 최대한 활용 하는 병렬 선형 대수 라이브러리 PSBLAS 버전 3을 살펴 봐야 합니다. 여기 에는 해당 버전의 성능을 이전 버전과 비교 한 F90 / F95에 대한 논문도 있습니다 . 놀랍게도, 속도 차이는 전체적으로 무시할만한 수준이었습니다.


1

어떤 포트란 방언이 작성되었는지는 모르지만 일반적인 포트란 FEM 코드 인 윌리엄 미첼의 PHAML 코드가 있습니다.

나는 Fortran 대 C ++에 대한 토론에서 공정하지 않다는 것을 인정하지만 현대의 Fortran 기반 FEM 코드를 찾는 데 어려움을 겪으면서 동시에 많은 C ++ 기반 코드를 찾는 것이 어렵다고 지적하고 싶습니다. 공동체 전체가 생각하는 것 중 하나는가는 길입니다. 물론 자신이 좋아하고 익숙한 언어로 자신의 코드를 작성하는 데 아무런 문제가 없지만 간단한 설문 조사는 이미 섬을 만들고 있음을 보여줍니다. 이를 고려할 수도 있습니다.


-1

oop 2003 기능을 사용하는 ffr Engineering의 오픈 소스 포트란 라이브러리가 있습니다.


1
SciComp에 오신 것을 환영합니다! a) forDat의 기능 및 b) forDat의 OOP 기능에 대해 설명하지 않기 때문에 귀하의 답변은 실제로 도움이되지 않습니다. forDat의 개발자 ( scicomp.stackexchange.com/help/behavior 참조)가 forDat에서 이러한 기능을 사용하는 이유에 대해서도 언급 할 수 있으므로 기회가 없습니다.
Christian Clason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.