Mã Octree ở Fortran


10

Tôi mới làm quen với máy tính khoa học. Tôi đang tìm kiếm một triển khai Fortran (tốt nhất là f90) của một Octree.

Vấn đề của tôi yêu cầu một Octree phân chia miền của tôi cho đến khi không có nhiều hơn một số hạt N (hoặc nguồn mà tôi biết giá trị mật độ có thể được cắm trong một phương trình tích phân để giải phương trình như phương trình Laplace) trong bất kỳ hộp nào.

Tất cả những gì tôi có thể tìm thấy là việc thực hiện C ++ này . Tôi muốn biết nếu đã có thư viện Fortran hiện có mà tôi có thể sử dụng.

Ngoài ra, các đề xuất giấy tốt về triển khai Octree trong Fortran có thể được sử dụng để áp dụng các phương pháp tích phân nhanh trên hộp tính toán trở nên dễ dàng, sẽ được đánh giá cao!


Hãy thử BoxLib. Theo hướng dẫn sử dụng có phiên bản Fortran 90 thuần túy. Xem ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Câu trả lời:


9

Tôi không có kinh nghiệm với Octrees, nhưng bất cứ khi nào có thư viện C ++ đẹp mà tôi muốn sử dụng trong Fortran, tôi chỉ cần viết trình điều khiển C đơn giản --- điển hình là một vài hàm C thực hiện chính xác những gì tôi cần. Sau đó, tôi gọi họ từ Fortran bằng mô-đun iso_c_binding. Điều này có lợi thế lớn là bạn sử dụng lại một thư viện được thử nghiệm tốt với cộng đồng xung quanh nó.

Để biết thông tin về cách sử dụng iso_c_binding, tôi đã viết một số thông tin ở đây:

http://fortran90.org/src/best-practices.html#interfaces-with-c

thông tin cụ thể này là để gọi Fortran từ C. Tôi có thể thấy rằng tôi nên cập nhật nó. Đây là mã của tôi nơi tôi gọi thư viện C ++ từ Fortran, liên kết đầu tiên là trình điều khiển C đơn giản, liên kết thứ hai là giao diện Fortran và sau đó tôi chỉ gọi nó như bất kỳ chương trình con Fortran nào khác:

https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp

https://github.com/certik/hfsolver/blob/master/src/qc.f90


6

Bạn dường như rất sẵn sàng sử dụng Fortran. Octrees, khi được triển khai hiệu quả, là các cấu trúc dữ liệu khá phức tạp và, do đó, phù hợp hơn với các ngôn ngữ lập trình có nhiều hỗ trợ hơn cho việc này, chẳng hạn như C / C ++. Có một số triển khai chất lượng rất cao trong C / C ++ mà bạn có thể sử dụng.


Cảm ơn câu trả lời của bạn! Nhưng, các phương pháp tích phân nhanh mà tôi đang sử dụng được viết bằng Fortran. Sẽ rất tự nhiên khi viết mã Octree ở Fortran.
rivendell

Những phương pháp tích phân nhanh? Chúng chủ yếu được bao bọc trong các ngôn ngữ cấp cao hơn, cũng đáng chú ý là cũng bao bọc các quãng tám. . .
meawoppl

Điều gì hỗ trợ cho việc triển khai octree hiệu quả bị thiếu trong Fortran (hiện đại) so với C? Nhược điểm thực sự duy nhất tôi biết là thiếu số nguyên không dấu, do đó bạn phải viết một số thao tác bitwise một cách rõ ràng.
Jannis Teunissen

@JannisTeunissen - không phải Fortran 200x không có cách tạo cấu trúc dữ liệu phức tạp, nó nói thêm về mức độ dễ dàng của nó (hoặc không). C ++, ví dụ, đã std::map, std::multimap, std::vector, std::sort, và vân vân và vân vân, tất cả độc lập quát avaiable của các loại dữ liệu cơ bản được lưu trữ. Không có gì phải bàn cãi rằng bạn cũng có thể làm tất cả những điều này ở Fortran, nhưng nó đòi hỏi nhiều ngày và tuần làm việc mà bạn có thể sử dụng một cách hiệu quả để thực sự hoạt động trên ứng dụng của mình, thay vì trên các cấu trúc dữ liệu cơ bản.
Wolfgang Bangerth
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.