如何将Julia Int / Bool数组/向量转换为Fortran LOGICAL数组,以便在Julia的ccall中使用?
我尝试在https://gist.github.com/axsk/28f297e2207365a7f4e8/中将其作为Array {Bool}传递,但代码无法正常工作,我非常有信心问题是Bool-Logical转换。
答案 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
,这取决于平台。