มีห้องสมุดวิทยาศาสตร์โอเพ่นซอร์สที่ใช้ Fortran สมัยใหม่กับ OOP หรือไม่?


14

ฉันใช้เวลาสองสามเดือนที่ผ่านมาในการเขียนโปรแกรม Fortran เพื่อแก้ปัญหาระบบ PDE (อธิบายการไหลของของไหลและการเผาไหม้) ฉันพยายามใช้ Fortran มาตรฐานล่าสุดและความสามารถของ OOP ใหม่ที่ Fortran มี ฉันทำงานด้วยตัวเองและไม่มีกูรูด้านฟอร์แทรนข้างฉันเพื่อถามคำถามดังนั้นวิธีที่จะเรียนรู้ให้ฉันก็คือการดูห้องสมุด / นักแก้ปัญหาอื่น ๆ ที่ใช้ Fortran ที่ทันสมัย

น่าเสียดายที่ห้องสมุดของ Fortran ทุกแห่งในนั้นดูเหมือนว่าจะถูกเขียนใน Fortran ที่เก่าแก่ทีเดียว ดังนั้นฉันต้องคิดผ่านการออกแบบชั้นเรียนและการมีปฏิสัมพันธ์กับตัวเอง และฉันก็ไม่ได้เป็นคนที่รับรองว่าฉันทำถูกต้องโดยเฉพาะอย่างยิ่งถ้ามีคนมองจากมุมมองของ preformance แต่บางทีฉันอาจพลาดบางสิ่งบางอย่างและมีแพ็คเกจทางวิทยาศาสตร์สมัยใหม่ที่เขียนขึ้นหาก Fortran และใช้ OOP หรือไม่

มีไลบรารี C ++ ที่ดีมากมายที่จะเรียนรู้จาก (OpenFOAM, deal.II และอื่น ๆ ) และไลบรารี Python ภาษาเหล่านั้นมีชุมชนที่ใหญ่กว่าโดยทั่วไปเช่นกัน อาจดีกว่าที่จะวาง Fortran และเปลี่ยนภาษาถ้าฉันต้องการเรียนรู้จากตัวอย่าง?


แจ็คดูเหมือนว่าความคิดเห็นของคุณจะใหญ่เกินไป: "(ส่วนที่เหลือของความคิดเห็นนี้คือตอบสนองความต้องการด้านความยาว)" นั่นเพิ่มความหวังในตัวฉันดังนั้นโปรดแก้ไขเพื่อให้ทุกคนสามารถอ่านได้: D
เตียม

2
ขออภัยความคิดเห็นของฉันทำให้เข้าใจผิดเนื่องจากฉันตอบคำถามสุดท้ายของคุณ ฉันหมายความว่าถ้าคุณต้องการเรียนรู้ OOP ที่ทันสมัยจากตัวอย่างจากห้องสมุดที่เต็มเปี่ยม C ++ คือหนทางที่จะไป ขออภัย; ฉันไม่ได้ตระหนักถึงโอเพ่นซอร์สที่ดีที่สุดของห้องสมุด Fortran ที่ทันสมัย
Jack Poulson

6
ฉันขอเตือนว่า C ++ นั้นค่อนข้างที่จะเกิดการบิดตัวของการวางแนววัตถุอยู่แล้วและหลาย ๆ ไลบรารีก็ใช้ผิดวัตถุประสงค์ (จริงสำหรับภาษาใด ๆ ) ฉันยอมรับว่ามันสำคัญที่จะต้องดูเกิน Fortran แต่มันก็สำคัญที่จะต้องดูเกินกว่า C ++ เรียนรู้วิธีการแสดงแนวคิดในภาษาที่แตกต่างกันหลายประเภท (เชิงวัตถุทั่วไปและการทำงาน; คงที่และไดนามิก) จะคุ้มค่าแม้ว่าคุณจะกลับมาเป็นภาษาง่าย ๆ เช่น C สำหรับงาน "ของจริง" ของคุณ
Jed Brown

คำตอบ:


10

มีรหัส CFD ที่ทันสมัยซึ่งคุณสามารถดูได้ ตัวอย่างเช่น ...

ความลื่นไหล : รหัส CFD (FE) อเนกประสงค์สำหรับใช้งานทั่วไป; AMR แม้ไม่มีโครงสร้างอย่างสมบูรณ์

WRF : ระบบพยากรณ์อากาศแบบตัวเลขรุ่นต่อไปจาก NCAR

รหัส Saturne : รหัส CFD (FV) สำหรับวัตถุประสงค์ทั่วไป คุณสมบัติบางอย่างที่ระบุไว้ในWikipedia

มีรหัส Fortran ทันสมัยที่คล้ายกันสำหรับการวิเคราะห์โครงสร้าง

แต่พวกเขาอาจไม่สามารถใช้ความสามารถ F2003 ได้อย่างเต็มที่เนื่องจากขาดการสนับสนุนคอมไพเลอร์อย่างกว้างขวาง คอมไพเลอร์ใหม่ส่วนใหญ่รองรับส่วนใหญ่ของ F2003 (ดูเอกสาร ACM SIGPLAN Fortran Forum) แต่ใช้เวลานานในการมีฐานผู้ใช้ที่กว้างขวาง ตัวอย่างเช่นเดเบียนเสถียรมี GCC 4.4.5 ดังนั้นโดยทั่วไปแล้วคุณไม่ควรคาดหวังว่าผู้ใช้ของคุณจะมีอะไรที่ดีกว่า (เช่น 4.5 / 4.6 / 4.7)

เมื่อคอมไพเลอร์ F2003 แพร่หลายคุณจะเห็น libs / code ที่ใช้ความสามารถของ F2003

สำหรับตอนนี้คุณสามารถดูหนังสือเล่มนี้โดย Damian Rouson เกี่ยวกับวิธีใช้ความสามารถของ OOP


ถูกต้อง F2003 เพิ่งจะทัน (สำหรับห้องสมุดของฉันเองฉันตัดสินใจติดกับ F95 สำหรับพกพาสูงสุด) เราจะเห็นโค้ดเพิ่มเติมเขียนใน F2003 หรือแม้แต่ F2008 ในไม่ช้า
OndřejČertík

จุดที่ดีมาก ฉันหวังว่าเราจะเห็นรหัสมาตรฐานใหม่เพิ่มเติมในอีกไม่กี่ปีข้างหน้า
เตียม

เดเมียน Rouson ทำงานบนForTrillinosซึ่งเป็นอินเตอร์เฟซที่ทันสมัย Fortran กับโครงการ Trillinos
Jeremy Kozdon

7

ถ้าคุณต้องการเรียนรู้จากตัวอย่างฉันอยากจะแนะนำrosettacodeเว็บไซต์ chrestomathy การเขียนโปรแกรม ที่นั่นคุณสามารถพบปัญหาตัวอย่างมากมายที่เขียนเปรียบเทียบในภาษาที่แตกต่างกันค่อนข้างน้อย

บางทีสิ่งที่น่าสนใจสำหรับคุณคือวิกิฟอร์แทรนและที่นี่คือส่วนของ OOP ใน Fortran ซึ่งอาจเป็นประโยชน์

Fortan ทำได้ดี - อย่ายอมแพ้!


ฉันชอบ Fortran ตัวเอง :) ฉันรู้ว่าเว็บไซต์วิกิพีเดียหนังสือ Matcalds นั้นดีมากเช่นเดียวกับบทเรียนของ PGI แต่การได้เห็นเนื้อหาจริงน่าจะดี!
เตียม

รูปแบบการเขียนโค้ดของdolfyn CFD นั้นมีความครอบคลุมจริงๆและ "ทันสมัย ​​Fortran literate" มีคุณสามารถค้นหาตัวอย่างของโครงสร้างข้อมูลบางอย่างเช่นรายการที่เชื่อมโยง ฯลฯ ซึ่งอาจมีข้อมูลและ OOP เล็กน้อยถ้าฉันจำได้อย่างถูกต้อง
Johntra Volta

4

ฉันเห็นด้วยกับความคิดเห็นโดย @JackPoulson ฉันไม่ได้ตระหนักถึงไลบรารีโอเพนซอร์ซที่เขียนใน Fortran สมัยใหม่ ดังนั้นคำตอบสำหรับคำถามเฉพาะของคุณเกี่ยวกับการต้องการเปลี่ยนเป็น C ++ เพื่อเรียนรู้จากตัวอย่างจึงเป็น "โชคร้าย" แต่เพื่อความชัดเจนฉันรู้ว่ามีห้องสมุดอย่างน้อยหนึ่งแห่งที่ถูกเขียนขึ้นโดยเฉพาะใน Fortran ที่ทันสมัยโดยมุ่งไปที่ OOP ดังนั้นจึงเป็นไปได้ (และคุ้มค่า) อย่างไรก็ตามห้องสมุดนี้ไม่ใช่โอเพ่นซอร์สดังนั้นมันจะไม่ช่วยให้คุณบรรลุเป้าหมายการเรียนรู้

อย่างไรก็ตามคุณมีแนวโน้มที่จะลังเลที่จะทิ้งสิ่งที่คุณทำไปแล้ว หากคุณยังสนใจที่จะติดตาม Fortran สำหรับเรื่องนี้และมีคำถามในการพัฒนาที่เฉพาะเจาะจงฉันขอแนะนำให้คุณถามพวกเขาใน StackOverflow มีผู้พัฒนา Fortran ที่มีทักษะสูงจำนวนไม่น้อยที่ทำงานอยู่ที่นั่นและยินดีที่จะช่วยเหลือ


3

ฉันมาสายนิดหน่อย แต่คุณควรจะดูรุ่นที่ 3 ของห้องสมุดพีชคณิตเชิงเส้นขนานPSBLASซึ่งใช้ประโยชน์อย่างเต็มที่จากคุณสมบัติ Fortran ที่ทันสมัยเช่นการรับมรดกและความหลากหลาย นอกจากนี้ยังมีกระดาษที่นี่ซึ่งพวกเขาเปรียบเทียบประสิทธิภาพของรุ่นนั้นกับรุ่นเก่าซึ่งติดกับ F90 / F95 น่าแปลกที่ความแตกต่างของความเร็วนั้นน่าประหลาดใจมากโดยรวม


1

ฉันไม่รู้ภาษาถิ่นของ Fortran ที่เขียน แต่มีรหัส PHAML ของ William Mitchell ซึ่งเป็นรหัสทั่วไปของ Fortran FEM

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


-1

มีไลบรารีโอเพ่นซอร์สฟอร์แทรนสำหรับ Dat โดย ffr Engineering ซึ่งใช้คุณสมบัติของ oop 2003


1
ยินดีต้อนรับสู่ SciComp! คำตอบของคุณไม่เป็นประโยชน์จริง ๆ เนื่องจากคุณไม่ได้อธิบาย a) สิ่งที่ forDat ทำและ b) คุณลักษณะใดของ OOP ที่ใช้สำหรับ DAT คุณยังขาดโอกาสที่นี่เนื่องจากเป็นนักพัฒนาซอฟต์แวร์ของ DAT (ซึ่งคุณควรเปิดเผยโดยดูที่scicomp.stackexchange.com/help/behavior ) คุณอาจพูดถึงสาเหตุที่ใช้คุณสมบัติเหล่านั้น
Christian Clason
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.