Có thư viện khoa học mã nguồn mở nào sử dụng Fortran hiện đại với OOP không?


14

Tôi đã dành vài tháng qua để mã hóa chương trình Fortran để giải quyết một hệ thống PDE cụ thể (mô tả dòng chảy / đốt chất lỏng). Tôi đã thử sử dụng Fortran tiêu chuẩn mới nhất và các capoverites OOP hiện đại mới có. Tôi đang tự mình làm việc và không có guru Fortran bên cạnh để đặt câu hỏi, vì vậy một cách để học hỏi đối với tôi sẽ là xem xét các thư viện / người giải quyết khác sử dụng Fortran hiện đại.

Thật không may, tất cả các thư viện Fortran ngoài kia dường như được viết bằng các ngọn Fortran, Fortran90 khá cũ. Vì vậy, tôi đã phải tự mình suy nghĩ về thiết kế lớp và tương tác. Và tôi hoàn toàn không phải là người chắc chắn rằng tôi đã làm đúng, đặc biệt nếu một người nhìn từ góc độ khuôn mẫu. Nhưng có lẽ tôi đã bỏ lỡ điều gì đó và có những gói khoa học hiện đại được viết nếu Fortran và sử dụng OOP?

Có rất nhiều thư viện C ++ tốt để học hỏi (OpenFOAM, deal.II và hơn thế nữa) và cả thư viện Python. Những ngôn ngữ này có một cộng đồng lớn hơn nói chung là tốt. Có lẽ tốt hơn là bỏ Fortran và chuyển đổi ngôn ngữ nếu tôi muốn học bằng ví dụ?


Jack, có vẻ như bình luận của bạn quá lớn: "(Phần còn lại của bình luận này là để đáp ứng yêu cầu về độ dài.)". Điều đó làm tăng hy vọng trong tôi, vì vậy hãy chỉnh sửa nó để mọi người có thể đọc nó: D.
tiam

2
Xin lỗi, nhận xét của tôi là sai lệch, vì tôi đang trả lời câu hỏi cuối cùng của bạn. Ý tôi là, nếu bạn muốn học OOP hiện đại bằng ví dụ từ các thư viện chính thức, C ++ là con đường để đi. Lấy làm tiếc; Tôi không biết về bất kỳ thư viện Fortran hiện đại tốt nhất nào về nguồn mở.
Jack Poulson

6
Tôi xin lưu ý rằng C ++ đã phần nào trở thành hiện thân xoắn của định hướng đối tượng và nhiều thư viện tiếp tục lạm dụng nó (đúng với bất kỳ ngôn ngữ nào). Tôi đồng ý rằng điều quan trọng là nhìn xa hơn Fortran, nhưng điều quan trọng là cũng phải nhìn xa hơn C ++. Học cách diễn đạt các khái niệm bằng các ngôn ngữ thuộc nhiều loại khác nhau (hướng đối tượng, chung chung và chức năng; tĩnh và động) sẽ có giá trị ngay cả khi bạn quay lại với một ngôn ngữ đơn giản như C cho công việc "thực sự" của bạn.
Jed Brown

Câu trả lời:


10

Có các mã CFD hiện đại mà bạn có thể xem xét. Ví dụ ...

Tính lưu loát : Mã CFD (FE) đa mục đích chung; Ngay cả AMR hoàn toàn không có cấu trúc

WRF : Hệ thống dự báo thời tiết mô hình số thế hệ tiếp theo từ NCAR

Mã Saturne : CFD (FV) mục đích chung; Một số tính năng được liệt kê trên Wikipedia

Có mã Fortran hiện đại tương tự để phân tích cấu trúc.

Nhưng họ có thể không sử dụng đầy đủ các khả năng F2003 do thiếu hỗ trợ trình biên dịch rộng rãi. Hầu hết các trình biên dịch mới đều hỗ trợ các phần lớn của F2003 (xem các tài liệu của Diễn đàn ACM SIGPLAN Fortran) nhưng cần có thời gian để có một cơ sở người dùng rộng rãi. Ví dụ, Debian ổn định có GCC 4.4.5, vì vậy nói chung, bạn không nên mong đợi người dùng của mình có bất cứ điều gì tốt hơn (ví dụ: 4.5 / 4.6 / 4.7).

Khi trình biên dịch F2003 trở nên phổ biến, bạn sẽ thấy libs / code sử dụng các khả năng của F2003.

Bây giờ bạn có thể xem cuốn sách này của Damian Rouson về cách sử dụng các khả năng OOP.


Đúng vậy, F2003 vừa mới bắt kịp (đối với thư viện của riêng tôi, tôi đã quyết định gắn bó với F95 để có tính di động tối đa). Chúng ta sẽ thấy nhiều mã được viết trong F2003 hoặc thậm chí F2008 sớm.
Ondřej Čertík

Điểm rất tốt. Tôi hy vọng chúng ta sẽ thấy nhiều mã tiêu chuẩn mới hơn trong những năm tới.
tiam

Damian Rouson hoạt động trên ForTrillinos , đây là giao diện fortran hiện đại cho Dự án Trillinos .
Jeremy Kozdon

7

Nếu bạn muốn tìm hiểu bằng ví dụ, tôi muốn giới thiệu rosettacode , một trang web về bệnh lý lập trình. Ở đó bạn có thể tìm thấy nhiều vấn đề ví dụ được viết tương đối bằng nhiều ngôn ngữ khác nhau.

Có thể thậm chí thú vị hơn đối với bạn sẽ là Fortran wiki , và đây là một phần về OOP ở Fortran có thể hữu ích.

Fortan đang làm rất tốt - đừng từ bỏ nó!


Bản thân tôi thích Fortran :). Tôi biết trang web wiki, sách Matcalds cũng rất tốt cũng như hướng dẫn của PGI. Nhưng nhìn thấy một số tài liệu thực sự sẽ tốt đẹp!
tiam

Phong cách mã hóa của mã CFD dolfyn thực sự toàn diện và "biết chữ Fortran hiện đại". Ở đó bạn có thể tìm thấy các ví dụ về một số cấu trúc dữ liệu như danh sách được liên kết, v.v. có thể là thông tin và một chút OOP nếu tôi nhớ chính xác.
Johntra Volta

4

Tôi đồng ý với nhận xét của @JackPoulson. Tôi không biết về bất kỳ thư viện mã nguồn mở nào được viết bằng Fortran hiện đại. Vì vậy, câu trả lời cho câu hỏi cụ thể của bạn về việc cần phải chuyển sang C ++ để tìm hiểu bằng ví dụ là một "không" có đáng tiếc. Nhưng, rõ ràng, tôi biết rằng có ít nhất một thư viện tồn tại được viết gần như độc quyền ở Fortran hiện đại với một mắt hướng về OOP, vì vậy điều đó là có thể (và đáng giá). Tuy nhiên, thư viện này không phải là nguồn mở, vì vậy nó sẽ không giúp bạn đạt được mục tiêu học tập.

Tuy nhiên, bạn cũng có thể miễn cưỡng vứt bỏ những gì bạn đã hoàn thành. Nếu bạn vẫn quan tâm đến việc theo đuổi Fortran vì điều này và có các câu hỏi phát triển cụ thể, tôi khuyến khích bạn nên hỏi họ trên StackOverflow. Có một vài nhà phát triển Fortran có tay nghề cao đang hoạt động ở đó rất vui lòng giúp đỡ.


3

Tôi hơi muộn về vấn đề này, nhưng bạn nên xem phiên bản 3 của thư viện đại số tuyến tính song song PSBLAS , tận dụng tối đa các tính năng của Fortran hiện đại như tính kế thừa và đa hình. Cũng có một bài báo ở đây nơi họ so sánh hiệu suất của phiên bản đó với các phiên bản cũ hơn, bị mắc kẹt với F90 / F95. Đáng ngạc nhiên là đủ, sự khác biệt tốc độ là không đáng kể về tổng thể.


1

Tôi không biết phương ngữ Fortran nào được viết trong đó, nhưng có mã PHAML của William Mitchell là mã mục đích chung của mã Fortran FEM.

Tôi sẽ thừa nhận rằng tôi không vô tư trong cuộc thảo luận về Fortran vs C ++ nhưng tôi muốn chỉ ra rằng bạn gặp khó khăn trong việc tìm mã FEM dựa trên Fortran hiện đại đồng thời tìm thấy rất nhiều mã dựa trên C ++ một cái gì đó của toàn bộ cộng đồng nghĩ là con đường để đi. Tất nhiên không có gì sai khi cố gắng xây dựng mã của riêng bạn bằng ngôn ngữ bạn thích và quen thuộc, nhưng khảo sát ngắn gọn của bạn đã cho bạn thấy rằng bạn đang xây dựng một hòn đảo. Bạn có thể muốn đưa nó vào tài khoản.


-1

Có thư viện fortran mã nguồn mở forDat của ffr Engineering sử dụng các tính năng của oop 2003


1
Chào mừng đến với SciComp! Câu trả lời của bạn không thực sự hữu ích vì bạn không mô tả a) forDat làm gì và b) tính năng OOP nào choDat sử dụng. Bạn cũng đang bỏ lỡ một cơ hội ở đây, vì là nhà phát triển của forDat (mà bạn nên tiết lộ, nhân tiện, hãy xem scicomp.stackexchange.com/help/behavior ), bạn cũng có thể đề cập tại sao forDat sử dụng các tính năng đó.
Christian Clason
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.