Modern Fortran'ı OOP ile kullanan açık kaynaklı bilimsel kütüphaneler var mı?


14

Son birkaç ayı belirli bir PDE sistemini çözmek için bir Fortran programını kodlamak için harcadım (sıvı akışını / yanmasını açıklar). En son standart Fortran'ı ve modern Fortran'ın sahip olduğu yeni OOP yeteneklerini kullanmaya çalıştım. Kendi başıma çalışıyorum ve soru sormak için yanımda Fortran gurusu yok, bu yüzden benim için öğrenmenin doğal bir yolu, modern Fortran'ı kullanan diğer kütüphanelere / çözücülere bakmak olacaktır.

Ne yazık ki, tüm Fortran kütüphaneleri oldukça eski Fortran, Fortran90 tepelerinde yazılmış gibi görünüyor. Bu yüzden sınıf tasarımı ve etkileşimi kendim düşünmeliydim. Ve bunu doğru yaptığım konusunda hiç certian değilim, özellikle de bir performans perspektifinden bakarsanız. Ama belki bir şey kaçırdım ve eğer Fortran ve OOP kullanıyorsa yazılmış modern bilimsel paketler var mı?

(OpenFOAM, deal.II ve daha fazlası) ve ayrıca Python kütüphanelerinden öğrenilecek çok sayıda iyi C ++ kütüphanesi vardır. Bu diller de genel olarak daha büyük bir topluluğa sahiptir. Örnekle öğrenmek istiyorsam Fortran'ı bırakmak ve dili değiştirmek belki daha iyi mi?


Jack, yorumunuzun çok büyük olduğu anlaşılıyor: "(Bu yorumun geri kalan kısmı uzunluk gereksinimini karşılamaktır.)". Bu içimde umudu artırır, bu yüzden lütfen herkesin okuyabilmesi için düzenleyin: D.
tiam

2
Üzgünüm, son sorunuza cevap verdiğim için yorumum yanıltıcıydı. Demek istediğim, eğer modern OOP'yi tam teşekküllü kütüphanelerden örnek olarak öğrenmek istiyorsanız, C ++ yoludur. Afedersiniz; Açık kaynak kodlu türünün en iyisi olan modern Fortran kütüphanelerinin farkında değilim.
Jack Poulson

6
C ++ zaten nesne yönlendirme bükülmüş bir enkarnasyon olduğunu ve birçok kütüphane daha da kötüye (herhangi bir dil için doğru) dikkat edin. Fortran'ın ötesine bakmanın önemli olduğunu kabul ediyorum, ancak C ++ 'ın ötesine de bakmak önemlidir. Kavramları birkaç farklı dilde (nesne yönelimli, jenerik ve fonksiyonel; statik ve dinamik) nasıl ifade edeceğinizi öğrenmek, "gerçek" işiniz için C gibi basit bir dile geri dönseniz bile buna değecektir.
Jed Brown

Yanıtlar:


10

Bakabileceğiniz modern CFD kodları vardır. Örneğin ...

Akışkanlık : Genel amaçlı çok fazlı CFD (FE) kodu; Tamamen yapılandırılmamış AMR bile

WRF : NCAR'dan gelecek nesil sayısal model hava tahmin sistemi

Kod Saturne : Genel amaçlı CFD (FV) kodu; Wikipedia'da listelenen bazı özellikler

Yapısal analiz için benzer modern Fortran kodları vardır.

Ancak, yaygın derleyici desteğinin olmaması nedeniyle tam F2003 özelliklerini kullanamayabilirler. Çoğu yeni derleyici F2003'ün büyük bölümlerini destekler (bkz. ACM SIGPLAN Fortran Forum belgeleri), ancak geniş bir kullanıcı tabanına sahip olmak zaman alır. Örneğin Debian stabil GCC 4.4.5'e sahiptir, bu nedenle genel olarak kullanıcılarınızdan daha iyi bir şey beklememelisiniz (yani 4.5 / 4.6 / 4.7).

F2003 derleyicileri yaygınlaştıkça F2003 özelliklerini kullanan libs / kod göreceksiniz.

Şimdilik OOP yeteneklerinin nasıl kullanılacağına dair Damian Rouson'un bu kitabına bakabilirsiniz .


Doğru, F2003 yakın zamanda yetişiyor (kendi kütüphanem için maksimum taşınabilirlik için F95 ile çalışmaya karar verdim). Yakında F2003 veya hatta F2008'de yazılmış daha fazla kod göreceğiz.
Ondřej Čertík

Çok iyi bir nokta. Umarım önümüzdeki yıllarda daha yeni standart kodlar göreceğiz.
tiam

Damian Rouson , Trillinos Projesi için modern bir fortran arayüzü olan ForTrillinos üzerinde çalışıyor .
Jeremy Kozdon

7

Örnek olarak öğrenmek istiyorsanız , bir programlama chrestomathy sitesi olan rosettacode'u tavsiye ederim . Orada nispeten farklı dillerde karşılaştırmalı olarak yazılmış birçok örnek problem bulabilirsiniz.

Belki sizin için daha da ilginç olabilir Fortran wiki ve işte Fortran'daki OOP ile ilgili yararlı olabilecek bir bölüm.

Fortan gayet iyi gidiyor - vazgeçmeyelim!


Fortran'ı kendim seviyorum :). Wiki web sitesini biliyorum, Matcalds kitapları da PGI öğreticilerinin yanı sıra çok iyi. Ama gerçek bir malzeme görmek güzel olurdu!
tiam

Dolfyn CFD kodunun kodlama tarzı gerçekten kapsamlı ve "modern Fortran okuryazar". Orada, bağlantılı listeler gibi bilgilendirici olabilecek bazı veri yapılarına ve doğru hatırlıyorsam biraz OOP örnekleri bulabilirsiniz.
Johntra Volta

4

@JackPoulson'un yorumuna katılıyorum. Modern Fortran'da yazılmış hiçbir açık kaynak kütüphanesinin farkında değilim. Örnek olarak öğrenmek için C ++ 'a geçmeye ihtiyaç duyduğunuz özel sorunuzun cevabı talihsiz bir "evet" tir. Ama açık olmak gerekirse, neredeyse tamamen modern Fortran'da OOP'a bakan bir kütüphanenin var olduğunu biliyorum, bu yüzden mümkün (ve değerli). Bu kütüphane açık kaynak değildir, bu nedenle öğrenme hedefinize ulaşmanıza yardımcı olmaz.

Bununla birlikte, daha önce tamamladığınız şeyi atmak konusunda da isteksiz olmanız muhtemeldir. Bunun için Fortran'ı takip etmekle ilgileniyorsanız ve belirli geliştirme sorularınız varsa, bunları StackOverflow'da sormanızı öneririm. Orada aktif olmaktan mutluluk duyabilecek birkaç yetenekli Fortran geliştiricisi var.


3

Bu konuda biraz geç kaldım, ancak miras ve polimorfizm gibi modern Fortran özelliklerinden tam olarak yararlanan paralel doğrusal cebir kütüphanesi PSBLAS'ın 3. sürümüne bakmalısınız . Burada , bu sürümün performansını F90 / F95'e yapışmış eski sürümleriyle karşılaştırdıkları bir kağıt da var . Şaşırtıcı bir şekilde, hız farkı genel olarak ihmal edilebilirdi.


1

Hangi Fortran lehçesinde yazıldığını bilmiyorum, ancak genel amaçlı Fortran FEM kodu olan William Mitchell'in PHAML kodu var.

Fortran vs C ++ tartışmasında tarafsız olmadığımı itiraf edeceğim, ancak modern bir Fortran tabanlı FEM kodu bulmakta zorluk çektiğinizi ve aynı zamanda C ++ tabanlı kodların birçoğunu bulduğunu belirtmek isterim topluluğun bir bütün olarak düşündüğü şey, gitmenin yoludur. Elbette, kendi kodunuzu sevdiğiniz ve tanıdığınız bir dilde oluşturmaya çalışmanın yanlış bir yanı yok, ancak kısa anketiniz zaten bir ada inşa ettiğinizi gösteriyor. Bunu hesaba katmak isteyebilirsiniz.


-1

Oop 2003 özelliklerini kullanan ffr Engineering tarafından açık kaynaklı fortran kütüphanesi var


1
SciComp'a Hoşgeldiniz! A) forDat'ın ne yaptığını ve b) ODat'ın hangi OOP özelliklerini kullandığını tarif etmediğiniz için cevabınız gerçekten yararlı değildir. Burada da bir fırsat kaçırıyorsunuz, çünkü forDat'ın geliştiricisi (bu arada, scicomp.stackexchange.com/help/behavior adresini açıklamanız gerekir ), forDat'ın neden bu özellikleri kullandığını da söyleyebilirsiniz.
Christian Clason
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.