首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Fortran的Metis

使用Fortran的Metis
EN

Stack Overflow用户
提问于 2011-11-17 00:31:00
回答 1查看 1.3K关注 0票数 0

我在Fortran中使用metis 5。我通过手册中给出的简单示例使用了PartGraphRecursive函数。给出的代码不是工作条件。

代码语言:javascript
复制
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调用中使用不同的输入,因为我想使用的大多数输入都是空的。

附注:我正在使用带有pgf90 Fortran编译器的Linux,并且我使用以下命令来编译和链接该文件。

代码语言:javascript
复制
Pgf90 –o main main.f90 libmetis.a

libmetis.a文件与main文件位于同一目录中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-17 03:03:50

Fortran 2003模块ISO_C_BINDING定义了一个类型为(C_PTR)的常量C_NULL_PTR。您可以使用此模块定义到子例程的接口。

它可能是这样的

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8155160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档