C METIS:不同操作系统上的不同结果

C METIS:不同操作系统上的不同结果,c,metis,C,Metis,这将调用对网格进行分区 编辑:C程序,考虑WeatherVane和PaulOgilvie的评论 在我的GNU/Linux上,我得到了以下结果: objval: 14 epart: 0 0 0 0 0 1 2 2 1 0 0 1 2 2 1 2 2 1 npart: 0 0 0 2 0 0 1 1 2 2 2 1 2 2 1 1 8 在我的OSX上时 objval: 17 epart: 0 1 1 0 1 0 2 2 0 1 1 1 2 2 1 2 2 0 npart: 0 1 1 1 0

这将调用对网格进行分区

编辑:C程序,考虑WeatherVane和PaulOgilvie的评论

在我的
GNU/Linux
上,我得到了以下结果:

objval: 14
epart: 0 0 0 0 0 1 2 2 1 0 0 1 2 2 1 2 2 1 
npart: 0 0 0 2 0 0 1 1 2 2 2 1 2 2 1 1 
8
在我的
OSX上时

objval: 17
epart: 0 1 1 0 1 0 2 2 0 1 1 1 2 2 1 2 2 0 
npart: 0 1 1 1 0 1 0 1 2 2 2 0 2 2 0 0 
8
是什么导致结果不同

我的意思是,无论操作系统/体系结构/编译器是什么,如何修复它总是得到相同的结果

注意:
idx\u t
int64\u t
,在我的
GNU/Linux
上是
long
,但在我的
OSX
上是
long

我的GNU/Linux 我的OSX METIS安装
METIS
版本为5.1.0

我已使用安装了METIS

包裹是 (文件
linux-64/metis-5.1.0-0.tar.bz2
osx-64/metis-5.1.0-2.tar.bz2


这些软件包就是用这个来构建的。

METIS
使用伪随机数

伪随机数由
GKlib
函数生成。(
GKlib
嵌入在
METIS
tarbarlls中)

默认情况下,
GKlib
使用C标准库中的
rand
函数,该函数可能在不同平台上生成不同的编号。(见:)

但是
GKlib
也可以使用标志
-DUSE_GKRAND
编译。它不使用rand函数,而是使用自己的函数,它总是给出不同平台的相同随机数

使用
-dusegkrand
编译函数中的
C
代码在my
GNU/Linux
和my
OSX
上给出相同的结果:

objval: 18
epart: 0 0 0 2 1 1 2 2 1 0 0 1 0 1 1 2 2 1 
npart: 0 0 0 0 2 0 1 1 2 1 2 1 2 2 1 1 
8

我已经使用此conda构建了
METIS

阅读,例如,关注有关它的链接,希望我不必挖掘METIS代码来发现此类错误。。。(我猜是我出的错)。这个呢:
//网格中的节点数(15点)#定义NN 16
,因此如果您告诉函数比实际多出一个,则可能是UB。或者注释只是一个输入错误?如果我正确阅读了METIS API,那么某些参数可能是空的,比如选项。但是,将指针传递给NULL对象与传递值NULL是有区别的。传递NULL对象,而METIS可能期望参数值为NULL。e、 g.:
METIS\u partmeshnodel(&ne,&nn,…选项,…)
应该是
METIS\u partmeshnodel(&ne,&nn,…空,…)
@WeatherVane好消息,谢谢!不管评论中有什么错误,我只是修正了
$ sw_vers 

ProductName:    Mac OS X
ProductVersion: 10.9.5
BuildVersion:   13F34

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

$ uname -m -p -r -s -v
Darwin 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64 i386
objval: 18
epart: 0 0 0 2 1 1 2 2 1 0 0 1 0 1 1 2 2 1 
npart: 0 0 0 0 2 0 1 1 2 1 2 1 2 2 1 1 
8