我定义了一个变量:
具有维度的VAR(t,o)
:t = 4且o = 11
IERREU = nf90_def_var(ncid," var",nf90_real,(/ oID,tID /),VarID)
看起来像:
VAR(1,1)=5
VAR(2,1)=2
VAR(3,1)=8
VAR(4,1)=9
VAR(1,2)=5
VAR(2,2)=2
VAR(3,2)=8
VAR(4,2)=9
....
VAR(1,11)=5
VAR(2,11)=2
VAR(3,11)=8
VAR(4,11)=9
要在netcdf文件中写入变量,我这样做:
IERREU = nf90_put_var(ncid, VarID, VAR)
在netcdf中,我希望得到变量顺序的数据,如:
VAR=5,5,5,5,5,5,5,5,5,5,5,
2,2,2,2,2,2,2,2,2,2,2,
8,8,8,8,8,8,8,8,8,8,8,
9,9,9,9,9,9,9,9,9,9,9;
我明白了:
VAR= 5,2,8,9,5,2,8,9,5,2,8,
9,5,2,8,9,5,2,8,9,5,2,
8,9,5,2,8,9,5,2,8,9,5,
2,8,9,5,2,8,9,5,2,8,9;
如何定义数据的顺序?
答案 0 :(得分:2)
如果您需要在程序中保持数组的维度顺序相同,并将其转换为netCDF文件,那么您有两个选项。
只需编写转置
3XX
或使用IERREU = nf90_put_var(ncid, VarID, transpose(VAR))
向量参数
map
IERREU = nf90_put_var(ncid, VarID, VAR, map=(/ t,1 /))
[1:http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-f90/NF90_005fPUT_005fVAR.html#NF90_005fPUT_005fVAR 1]
答案 1 :(得分:1)
对于netcdf中变量的定义以及要保存的变量的声明,维度的顺序必须相同。
netcdf中变量的定义适合您想要实现的目标。所以你应该有VAR(o,t)
,索引的顺序必须在VAR
的初始化中改变。既然您想要在矩阵的每一行中具有完全相同的值,如ncview所示,我建议您将fortran矩阵初始化为
var(:,1) = 5
var(:,2) = 2
var(:,3) = 8
var(:,4) = 9
这样,您确信一切都正确完成。请记住,fortran中维度的顺序在ncview中并不相同。
我认为(/ o, t /)
中的IERREU = nf90_def_var(ncid, "var", nf90_real, (/ o, t /), VarID)
只是一个拼写错误,并且您实际上有IERREU = nf90_def_var(ncid, "var", nf90_real, (/ oid, tid /), VarID)
之类的内容,其中oid
和tid
来自致电nf90_def_dim
。如果是这种情况,您应该编辑您的帖子。