gpt4 book ai didi

c++ - 在 Fortran 程序中使用 Boost 图形库 (BGL)

转载 作者:太空狗 更新时间:2023-10-29 20:13:26 25 4
gpt4 key购买 nike

无论如何,我可以在我的 FORTRAN 程序中使用使用 Boost Graph Library (BGL) 的图形数据结构。

谁能帮助我或给我提示。我想在我的 MPI-FORTRAN 代码中在多个处理器上执行并行图结构。是否可以为此目的使用 Boost 图形库 (BGL)!

亲切的问候,齐夫

最佳答案

您必须构建一个用 C++ 编写的中间层,它在某些对您有用的特殊情况下执行所有模板,然后从 Fortran 调用它。 bind(C)iso_c_binding 模块是您的 friend 。我使用这种方法在 Fortran 中成功地使用了基于 Boost 的库 CGAL。

类似的东西:

我的_bgl.cc:

  #include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>

using namespace boost;
extern "C"{
void* make_graph(int num_vertices, int num_edges, int *edge_array)
{

// create a typedef for the Graph type
typedef adjacency_list<vecS, vecS, bidirectionalS> Graph;

Graph *g = new Graph(num_vertices);

// add the edges to the graph object
for (int i = 0; i < num_edges; ++i)
add_edge(edge_array[2*i], edge_array[2*i+1], *g);

return g;
}
}

我的_bgl.f90:

module my_bgl
use iso_c_binding

interface
type(c_ptr) function make_graph(num_vertices, num_edges, edge_array) bind(C,name="make_graph")
import
integer(c_int), value :: num_vertices
integer(c_int), value :: num_edges
integer(c_int) :: edge_array(2, num_edges)
end function
end interface

end module

make_graph 函数从输入的点返回一个指向图形的不透明指针。

关于c++ - 在 Fortran 程序中使用 Boost 图形库 (BGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com