我有一个处理大型数组的小型Fortran程序,因此我尝试尽可能地使其具有内存效率(尽可能使用BYTE数组和逻辑数组的位)。但是,当我将最大的数组写入NETCDF文件时
result=NF90_PUT_VAR(ncid,varid,large_array)
内存使用量增加(基本上是“大数组”双倍的内存需求),因此看起来NETCDF例程在写出它的过程中以某种方式复制了数组。
我的程序很短,它只包含MAIN部分和 no 子程序。程序任务是声明数组,定义内容,然后使用NF90_PUT_VAR将其写出。调用NF90_PUT_VAR时内存使用量增加。
有谁知道如何防止这种情况发生?例如有没有办法强制例程“块”数据,以减少内存需求?
答案 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