我正在尝试通过 Fortran 使用 METIS 对网格进行分区,我在 X64 Windows 7 系统上使用 Visual Studio 10.0 X64 构建了 lib 文件,我的程序如下:
module metis_vars
use iso_c_binding
! Variables
integer :: ia, ic
integer(kind=c_int) :: ne, nn
integer(kind=c_int) :: ncommon, objval
integer(kind=c_int) :: nparts
integer(kind=c_int), allocatable, dimension(:) :: eptr, eind
integer(kind=c_int), allocatable, dimension(:) :: epart, npart
type(c_ptr) :: vwgt, vsize, tpwgts
integer :: opts(0:40)
interface
subroutine METIS_PartMeshDual(ne,nn,eptr,eind,vwgt,vsize,ncommon,nparts,tpwgts,opts,objval,epart,npart) bind(C, name="METIS_PartMeshDual")
! use binding module
use iso_c_binding
! declare variables with C++ types semantics
integer(kind=c_int) :: ne, nn, ncommon, objval
integer(kind=c_int), dimension(*) :: eptr, eind
integer(kind=c_int), dimension(*) :: epart, npart
type(c_ptr), value :: vwgt, vsize, tpwgts
integer(kind=c_int) :: opts(0:40)
end subroutine METIS_PartMeshDual
end interface
end module
program METIS_PART_1
use iso_c_binding
use metis_vars
implicit none
open(unit=1, file='metis_test.mesh')
read(1,*), ne
nn = ne * 8
allocate( eptr(ne), eind(8*ne) )
allocate( epart(ne), npart(nn) )
do ic=1,ne
ia = (ic-1) * 8 + 1
read(1,*), eind(ia:ia+7)
eptr(ic) = ia
enddo
nparts = 4
ncommon = 2
vwgt = c_null_ptr
vsize = c_null_ptr
tpwgts = c_null_ptr
opts(0) = 1
opts(7) = 1
call METIS_PartMeshDual(ne,nn,eptr,eind,vwgt,vsize,ncommon,nparts,tpwgts,opts,objval,epart,npart)
end program METIS_PART_1
我修改了所有输入数组并且它们是正确的(我已经使用 EXE 成功地分割了这个网格),但是,当我使用 API 时,我收到以下错误:
当前使用的内存:zu 字节 使用的最大内存:zu 字节 *** CreateGraphDual 的内存分配失败:nind。请求大小:zu 字节
我不知道出了什么问题或如何调试它