我是科学计算的新手。我正在寻找Octree的Fortran(最好是f90)实现。
我的问题需要一个Octree来划分我的域,直到在任何框中不超过N个粒子(或我知道密度值的源,可以将其插入积分方程法来求解类似Laplace方程的方程)。
我所能找到的就是这个C ++实现。我想知道是否已经可以使用现有的Fortran库。
此外,将对关于Fortran中Octree实施的好的论文建议可以使用,以便在计算盒上应用快速积分方程方法变得容易,我们将不胜感激!
我是科学计算的新手。我正在寻找Octree的Fortran(最好是f90)实现。
我的问题需要一个Octree来划分我的域,直到在任何框中不超过N个粒子(或我知道密度值的源,可以将其插入积分方程法来求解类似Laplace方程的方程)。
我所能找到的就是这个C ++实现。我想知道是否已经可以使用现有的Fortran库。
此外,将对关于Fortran中Octree实施的好的论文建议可以使用,以便在计算盒上应用快速积分方程方法变得容易,我们将不胜感激!
Answers:
我没有使用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
您似乎对使用Fortran很有把握。高效执行的八位字节是相当复杂的数据结构,因此更适合于对此有更多支持的编程语言,例如C / C ++。您可以使用C / C ++中的许多非常高质量的实现。
std::map
,std::multimap
,std::vector
,std::sort
,等等等等,底层数据类型的所有一般性缴费独立被存储。毫无疑问,今天您也可以在Fortran中完成所有这些操作,但是这需要几天和几周的工作,您可以有效地在应用程序而不是基础数据结构上实际工作。