Fortran中的Octree代码


10

我是科学计算的新手。我正在寻找Octree的Fortran(最好是f90)实现。

我的问题需要一个Octree来划分我的域,直到在任何框中不超过N个粒子(或我知道密度值的源,可以将其插入积分方程法来求解类似Laplace方程的方程)。

我所能找到的就是这个C ++实现。我想知道是否已经可以使用现有的Fortran库。

此外,将对关于Fortran中Octree实施的好的论文建议可以使用,以便在计算盒上应用快速积分方程方法变得容易,我们将不胜感激!


尝试BoxLib。根据手册,有纯Fortran 90版本。参见ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali 2013年

Answers:


9

我没有使用Octrees的经验,但是每当要在Fortran中使用一些不错的C ++库时,我都只写了一个简单的C驱动程序-通常是一些可以完全满足我需要的C函数。然后,我使用iso_c_binding模块从Fortran中调用它们。这具有很大的优势,即您可以在社区附近重用经过良好测试的库。

有关如何使用iso_c_binding的信息,我在这里写下了一些信息:

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

此特定信息用于从C调用Fortran。我可以看到我应该对其进行更新。这是我从Fortran调用C ++库的代码,第一个链接是简单的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很有把握。高效执行的八位字节是相当复杂的数据结构,因此更适合于对此有更多支持的编程语言,例如C / C ++。您可以使用C / C ++中的许多非常高质量的实现。


感谢您的回答!但是,我要使用的快速积分方法是用Fortran编写的。同样用Fortran编写Octree代码也是很自然的。
rivendell

哪些快速积分方法?它们大多都用高级语言包装,也特别是包装八叉树。。。
meawoppl 2013年

与C相比,(现代)Fortran中缺少对有效octree实现的支持?我知道的唯一真正的缺点是缺少无符号整数,因此您必须显式编写一些按位运算。
Jannis Teunissen '16

@JannisTeunissen-不是Fortran 200x没有创建复杂数据结构的方法,更多的是它有多容易(或没有)。C ++,例如,已std::mapstd::multimapstd::vectorstd::sort,等等等等,底层数据类型的所有一般性缴费独立被存储。毫无疑问,今天您也可以在Fortran中完成所有这些操作,但是这需要几天和几周的工作,您可以有效地在应用程序而不是基础数据结构上实际工作。
Wolfgang Bangerth '16
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.