在写入netcdf文件时,防止NF90_PUT_VAR将大型数组的内存使用量增加一倍

时间:2017-08-03 14:46:43

标签: arrays fortran netcdf

我有一个处理大型数组的小型Fortran程序,因此我尝试尽可能地使其具有内存效率(尽可能使用BYTE数组和逻辑数组的位)。但是,当我将最大的数组写入NETCDF文件时

result=NF90_PUT_VAR(ncid,varid,large_array)

内存使用量增加(基本上是“大数组”双倍的内存需求),因此看起来NETCDF例程在写出它的过程中以某种方式复制了数组。

我的程序很短,它只包含MAIN部分和 no 子程序。程序任务是声明数组,定义内容,然后使用NF90_PUT_VAR将其写出。调用NF90_PUT_VAR时内存使用量增加。

有谁知道如何防止这种情况发生?例如有没有办法强制例程“块”数据,以减少内存需求?

1 个答案:

答案 0 :(得分:0)

目前我发现的唯一方法就是使用 start 选项一次性将一个3D数组写出来:

ALLOCATE(imarkslice(nx,ny))
! write out imark, one slice at time to reduce memory 
DO it=1,nt ! loop over times
  imarkslice=imark(:,:,it)
  CALL ncdfok(NF90_PUT_VAR(ncid,imark_varid,imarkslice,start=(/1,1,it/)))
ENDDO