如何将Julia Bool数组转换为Fortran逻辑数组

时间:2014-09-24 16:43:42

标签: julia

如何将Julia Int / Bool数组/向量转换为Fortran LOGICAL数组,以便在Julia的ccall中使用?

我尝试在https://gist.github.com/axsk/28f297e2207365a7f4e8/中将其作为Array {Bool}传递,但代码无法正常工作,我非常有信心问题是Bool-Logical转换。

2 个答案:

答案 0 :(得分:1)

我不太了解调用Fortran代码,但根据this

  

Fortran标准没有指定LOGICAL类型的变量   表示,超出要求LOGICAL变量的默认值   kind具有与默认INTEGER和REAL变量相同的存储大小。   GNU Fortran内部表示如下。

     

LOGICAL(KIND = N)变量表示为INTEGER(KIND = N)   但是,变量只有两个允许值:1表示.TRUE。和   0表示.FALSE ..任何其他整数值都会导致未定义的行为。

所以我会做类似以下的事情

julia_array = rand(Bool, 1:10)
fort_array  = Int[x?1:0 for x in julia_array]

然后使用fort_array作为输入。您使用的是哪个Fortran编译器?

编辑:事实证明,Julia开发人员已经定义了一种类型,该类型将使用链接的BLAS / LAPACK Base.BLAS.BlasInt,它将为系统使用正确的Int变体。

答案 1 :(得分:0)

正如iaindunning之前发布的那样,Fortran将Logical变量表示为Integers。 不幸的是,Integer类型的表示因平台而异。 虽然我在Windows上使用Int并在Linux / MacOS上使用Cint成功,但最后我使用BlasInt,这取决于平台。