梅蒂斯按照Fortran(Metis with Fortran)

2019-10-30 14:52发布

我使用梅蒂斯5 Fortran语言。 我现在用的是PartGraphRecursive与手册中给出的简单例子功能。 该代码给出这不是工作状态。

program main    
implicit none     
integer,parameter::nvtxs=15, Edges=22

integer::xadj(nvtxs+1),adjncy(2*Edges)    
integer::objval, part(nvtxs)

xadj=[0, 2, 5, 8, 11, 13, 16, 20, 24, 28, 31, 33, 36, 39, 42, 44]    
adjncy=[1, 5, 0, 2, 6, 1, 3, 7, 2, 4, 8, 3, 9, 0, 6, 10, 1, 5, 7, 11, 2, 6, 8, 12, 3, 7, 9, 13, 4, 8, 14, 5, 11, 6, 10, 12, 7, 11, 13, 8, 12, 14, 9, 13]

call METIS_PartGraphRecursive(vortices,1,xadj,adjncy,,,,2,,,,objval,part)

end program main

任何人都可以完成这个代码? 我不是很清楚如何使用不同的输入到METIS_PartGraphRecursive呼叫作为我最想使用的输入为NULL。

PS我使用的Linux与pgf90的Fortran编译器,我使用下面的命令来编译和链接文件。

Pgf90 –o main main.f90 libmetis.a

该libmetis.a文件在同一目录为主。

Answer 1:

Fortran 2003的模块ISO_C_BINDING定义为恒定C_NULL_PTR它的类型是类型(C_PTR)的。 您可以定义一个接口来使用此模块的子程序。

它会是这样的

interface

 subroutine METIS_PartGraphRecursive(n,xadj,adjncy,vwght,adjwgt,wgtflag,numflag,nparts,options,edgecut,part) bind(C)

   use iso_c_binding

   integer(c_int) :: !here the parameters you pass as integers
   type(c_ptr),value :: !here the parameters you want to pass c_null_ptr to
 end subroutine

endinterface

你可以使用类型(c_ptr),值的所有参数,但你必须定义指针为他们和使用功能C_LOC



文章来源: Metis with Fortran