我正在使用一個外部fortran庫,它返回大量的數據,其類型爲REAL(kind=8)
。但是,我需要將數據寫出爲REAL(kind=4)
。Fortran:將KIND = 8數組有效轉換爲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次)。現代機器不是問題,但正如其中一條評論所暗示的那樣,我正在尋找一種優雅的解決方案,它也非常高效!做分配似乎......懶惰和不雅行爲?
@HighPerformanceMark:我寫了一個未格式化(二進制)文件;它需要KIND = 4,因爲其他程序期望這種格式的數據。 – ccbunney
如果你正在做'I/O'轉換的速度並不重要,因爲它將比磁盤寫入快幾個數量級。也許你想要的是最有效率的解決方案,而不是最有效的解決方案。 – ja72
如何一次轉換一行然後在文件中追加該行。 – ja72