รหัส Octree ใน Fortran


10

ฉันยังใหม่กับการคำนวณทางวิทยาศาสตร์ ฉันกำลังมองหาการใช้ Fortran (ควรเป็น f90) ของ Octree

ปัญหาของฉันต้องการ Octree ที่แบ่งโดเมนของฉันจนกว่าจะมีไม่เกิน N อนุภาคบางส่วน (หรือแหล่งที่ฉันรู้ค่าความหนาแน่นซึ่งสามารถเสียบในวิธีการสมการอินทิกรัลเพื่อแก้สมการเช่นสมการ Laplace) ในกล่องใด ๆ

ทั้งหมดที่ฉันสามารถหาได้นี้ C ++ การดำเนินงาน ฉันต้องการทราบว่ามีห้องสมุด Fortran ที่มีอยู่แล้วที่ฉันสามารถใช้ได้หรือไม่

นอกจากนี้คำแนะนำกระดาษที่ดีเกี่ยวกับการใช้งาน Octree ใน Fortran ที่สามารถใช้เพื่อให้การใช้วิธีการสมการอินทิกรัลครบถ้วนในกล่องการคำนวณกลายเป็นเรื่องง่ายจะได้รับการชื่นชม!


ลอง BoxLib ตามคู่มือมีรุ่น Fortran 90 ที่บริสุทธิ์ ดูccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

คำตอบ:


9

ฉันไม่เคยมีประสบการณ์กับ Octrees แต่เมื่อใดก็ตามที่มีห้องสมุด C ++ ที่ดีที่ฉันต้องการใช้ใน Fortran ฉันเพียงแค่เขียนไดรเวอร์ C อย่างง่าย - โดยทั่วไปแล้วฟังก์ชั่น C บางอย่างที่ทำในสิ่งที่ฉันต้องการ จากนั้นฉันเรียกพวกเขาจาก Fortran โดยใช้โมดูล iso_c_binding นี่เป็นข้อได้เปรียบที่ยอดเยี่ยมที่คุณนำไลบรารีที่ผ่านการทดสอบมาแล้วอย่างดีกับชุมชนรอบ ๆ

สำหรับข้อมูลวิธีใช้ iso_c_binding ฉันเขียนข้อมูลบางอย่างที่นี่:

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

ข้อมูลเฉพาะนี้สำหรับเรียก Fortran จาก C. ฉันเห็นว่าฉันควรจะอัปเดต นี่คือรหัสของฉันที่ฉันเรียกไลบรารี C ++ จาก Fortran ลิงค์แรกคือไดรเวอร์ C ง่าย ๆ ลิงก์ที่สองคืออินเตอร์เฟส Fortran และจากนั้นฉันก็เรียกมันเหมือนกับรูทีนย่อย Fortran อื่น ๆ :

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

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


6

ดูเหมือนว่าคุณจะใช้ Fortran มาก Octrees เมื่อใช้อย่างมีประสิทธิภาพนั้นค่อนข้างซับซ้อนโครงสร้างข้อมูลและเหมาะสำหรับภาษาโปรแกรมที่มีการสนับสนุนมากกว่านี้เช่น C / C ++ มีการใช้งานคุณภาพสูงจำนวนมากใน C / C ++ ที่คุณสามารถใช้ได้


ขอบคุณสำหรับคำตอบ! แต่วิธีการรวมที่รวดเร็วที่ฉันจะใช้เขียนใน Fortran มันเป็นเรื่องธรรมดาที่จะเขียนรหัส Octree ใน Fortran เช่นกัน
rivendell

วิธีการรวมที่รวดเร็ว? พวกเขาส่วนใหญ่มักจะถูกห่อหุ้มด้วยภาษาระดับสูงกว่าซึ่งก็จะมีการห่อแปดชั้นด้วยเช่นกัน . .
meawoppl

การสนับสนุนการใช้งาน octree ที่มีประสิทธิภาพหายไปใน Fortran (ทันสมัย) เมื่อเปรียบเทียบกับ C หรือไม่ ข้อเสียจริงเพียงอย่างเดียวที่ฉันรู้ก็คือจำนวนเต็มที่ไม่ได้ลงชื่อจะหายไปดังนั้นคุณต้องเขียนการดำเนินการระดับบิตอย่างชัดเจน
Jannis Teunissen

@JanisTeunissen - ไม่ใช่ว่า Fortran 200x ไม่มีวิธีในการสร้างโครงสร้างข้อมูลที่ซับซ้อนมันเป็นเรื่องเกี่ยวกับความง่ายของมัน (หรือไม่) C ++ ตัวอย่างเช่นได้std::map, std::multimap, std::vector, std::sortและอื่น ๆ และอื่น ๆ ทั้งหมดเป็นอิสระ avaiable ทั่วไปของชนิดข้อมูลพื้นฐานการจัดเก็บ ไม่มีข้อโต้แย้งใด ๆ ที่คุณสามารถทำได้ทั้งหมดใน Fortran เช่นกันในวันนี้ แต่ต้องใช้เวลาเป็นวันและสัปดาห์ในการทำงานที่คุณสามารถนำไปใช้งานได้จริงในแอปพลิเคชันของคุณแทนที่จะใช้โครงสร้างข้อมูลพื้นฐาน
Wolfgang Bangerth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.