C METIS:不同操作系统上的不同结果
这将调用对网格进行分区 编辑:C程序,考虑WeatherVane和PaulOgilvie的评论 在我的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
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
代码在myGNU/Linux
和myOSX
上给出相同的结果:
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