Fortran:将KIND = 8数组有效转换为KIND = 4

时间:2016-03-04 13:16:01

标签: arrays fortran fortran90

我正在使用外部fortran库,它返回类型为REAL(kind=8)的大量数据。但是,我需要将数据写为REAL(kind=4)

将大型数据数组转换为其他KIND类型的最佳方法是什么?

我现在天真地这样做:

REAL(KIND=8), ALLOCATABLE :: data64(:,:)
REAL(KIND=4), ALLOCATABLE :: data32(:,:)

# allocate arrays and call external function
CALL some_external_function(data64)

# Convert to 32bit using simple assignment
data32 = data64

# Write out 32bit data....
WRITE(UOUT) data32

然而,这种方法要求我分配两个大型数组而不是一个并进行大量数据复制 - 在内存和处理方面似乎效率都不高......

有更聪明的方法吗?

BTW:矩阵的大小不一定很大 - 它们有所不同,但可能大约1000 x 1000(但这将在循环中出现100次)。对于现代机器来说不是问题,但正如其中一条评论所暗示的那样,我正在寻找一种高效的优雅解决方案!做这个分配似乎......懒惰而且不够优雅?

1 个答案:

答案 0 :(得分:1)

这里很优雅

write(uout) real(data64,kind(data32))