是否存在将现代Fortran与OOP结合使用的开源科学图书馆?


14

在过去的几个月中,我花了时间编写用于解决特定PDE系统(描述流体流动/燃烧)的Fortran程序。我尝试使用最新标准的Fortran和现代Fortran具有的新OOP功能。我自己工作,没有Fortran专家在旁边问问题,因此对我来说,学习的一种有益方式是查看使用现代Fortran的其他库/求解器。

不幸的是,所有的Fortran库似乎都是用相当古老的Fortran,Fortran90顶部编写的。因此,我必须自己仔细考虑课堂设计和互动。而且我完全不是我做得对的人,特别是如果从绩效角度看。但是,也许我错过了一些东西,如果有Fortran并使用OOP,有现代科学软件包编写吗?

有很多不错的C ++库可供学习(OpenFOAM,deal.II等)以及Python库。这些语言在一般情况下也有更大的社区。如果我想通过示例学习,最好放弃Fortran并切换语言吗?


杰克,看来您的评论太大了:“(其余评论是为了满足长度要求。)”。那使我内心充满希望,所以请对其进行编辑,以便每个人都可以阅读它:D。
tiam 2012年

2
抱歉,在回答您的最后一个问题时,我的评论具有误导性。我的意思是,如果您想从成熟的库中通过示例学习现代OOP,那么C ++是必经之路。抱歉; 我不知道任何开源的最佳现代Fortran库。
杰克·普尔森

6
我要警告的是,C ++已经有点像面向对象的扭曲了,许多库进一步滥用了它(对于任何语言都是如此)。我同意,超越Fortran很重要,但是超越C ++也很重要。学习如何用几种不同类型的语言(面向对象,通用和功能;静态和动态)表达概念是值得的,即使您回到像C这样的简单语言来进行“实际”工作也是如此。
杰德·布朗

Answers:


10

您可以查看现代的CFD代码。例如 ...

流动性:通用多相CFD(FE)代码;甚至完全非结构化的AMR

WRF:NCAR的下一代数值模型天气预报系统

代码Saturne:通用CFD(FV)代码;维基百科上列出的一些功能

也有类似的现代Fortran代码用于结构分析。

但是由于缺乏广泛的编译器支持,他们可能无法使用完整的F2003功能。大多数新的编译器确实支持F2003的大部分内容(请参阅ACM SIGPLAN Fortran论坛文章),但是拥有广泛的用户基础需要时间。例如,Debian稳定版具有GCC 4.4.5,因此一般而言,您不应期望用户有更好的功能(例如4.5 / 4.6 / 4.7)。

当F2003编译器普及后,您将看到使用F2003功能的库/代码。

现在,您可以阅读 Damian Rouson撰写的有关如何使用OOP功能的书。


没错,F2003才刚刚开始追赶(对于我自己的库,我决定坚持使用F95以实现最大的可移植性)。我们很快就会看到更多用F2003甚至F2008编写的代码。
昂德里杰·塞蒂克

很好的一点。希望在未来的几年中,我们会看到更多的新标准代码。
tiam 2012年

达米安Rouson工程对ForTrillinos,这是一个现代化的Fortran接口的Trillinos项目
杰里米·科兹登

7

如果您想通过示例学习,我建议您使用Rosettacode(一个编程的网站)。在那里,您可以找到许多用相当多种语言编写的示例问题。

Fortran wiki也许对您来说更有趣,是有关Fortran OOP的部分,可能会有用。

Fortan做得很好-让我们不要放弃!


我自己喜欢Fortran :)。我知道Wiki网站,Matcalds书籍以及PGI的教程也非常好。但是,看一些真实的材料会很好!
tiam 2012年

dolfyn CFD代码的编码样式确实很全面,并且具有“现代Fortran素养”。在这里,您可以找到一些数据结构的示例,例如链表等,它们可能会提供信息,如果我没记错的话,还可以了解一点点OOP。
约翰特拉·沃尔塔

4

我同意@JackPoulson的评论。我不知道用现代Fortran编写的任何开源库。因此,关于需要切换到C ++进行示例学习的特定问题的答案是不幸的“是”。但是,要明确地说,我确实知道至少存在一个几乎完全是用现代Fortran编写并着眼于OOP的库,因此这是可能的(而且值得)。但是,该库不是开源的,因此不会帮助您实现学习目标。

但是,您也可能不愿意丢弃已经完成的内容。如果您仍然对此感兴趣,并且有特定的开发问题,我鼓励您在StackOverflow上提问。有一些高技能的Fortran开发人员活跃在这里,乐于提供帮助。


3

我还不算很晚,但是您应该看一下并行线性代数库PSBLAS的版本3,该版本充分利用了现代Fortran功能(例如继承和多态性)。还有一个纸在这里,他们相比,该版本与他们的旧版本,其坚持F90 / F95的性能。令人惊讶的是,速度差异总体上可以忽略不计。


1

我不知道它写在哪个Fortran方言中,但是William Mitchell的PHAML代码是通用的Fortran FEM代码。

我承认在Fortran与C ++的讨论中我并不公正,但我想指出的是,您很难找到现代的基于Fortran的FEM代码,而同时发现很多基于C ++的代码却很难整个社区认为这是要走的路。尝试以您喜欢和熟悉的语言来构建自己的代码当然没有错,但是您的简短调查已经显示出您正在构建一个孤岛。您可能需要考虑到这一点。


-1

由ffr Engineering提供的forDat开源fortran库使用oop 2003功能


1
欢迎来到SciComp!您的答案并没有真正的帮助,因为您没有描述a)forDat的功能以及b)forDat使用的OOP功能。您在这里也错过了机会,因为作为forDat的开发人员(顺便说一下,您应该披露此信息,请参见scicomp.stackexchange.com/help/behavior),您还可以提及为什么 forDat使用这些功能。
Christian Clason 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.