我正在使用外部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次)。对于现代机器来说不是问题,但正如其中一条评论所暗示的那样,我正在寻找一种高效的优雅解决方案!做这个分配似乎......懒惰而且不够优雅?答案 0 :(得分:1)
这里很优雅
write(uout) real(data64,kind(data32))