在 netcdf 文件中写入变量
write variable in netcdf file
我定义了一个变量,例如:
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;
如何定义数据的顺序?
对于 netcdf 中的变量定义和您要保存的变量的声明,维度必须采用相同的顺序。
netcdf 中变量的定义与您要实现的目标是正确的。所以你应该有VAR(o,t)
,索引的顺序必须在VAR
的初始化中改变。由于您希望矩阵的每一行都具有与 ncview 所见完全相同的值,因此我建议您将 Fortran 矩阵初始化为
var(:,1) = 5
var(:,2) = 2
var(:,3) = 8
var(:,4) = 9
这样一来,您就可以确保一切都做对了。请记住,fortran 中的维度顺序与 ncview 中的顺序不同。
我假设 IERREU = nf90_def_var(ncid, "var", nf90_real, (/ o, t /), VarID)
中的 (/ o, t /)
只是一个拼写错误,而你实际上有类似 IERREU = nf90_def_var(ncid, "var", nf90_real, (/ oid, tid /), VarID)
的东西,其中 oid
和 tid
是结果来自对 nf90_def_dim
的呼叫。如果是这种情况,您应该编辑 post。
如果您需要在程序中保持数组的维度顺序相同,但在 netCDF 文件中将其转置,那么您有两种选择。
只写转置
IERREU = nf90_put_var(ncid, VarID, transpose(VAR))
或使用map
向量参数
IERREU = nf90_put_var(ncid, VarID, VAR, map=(/ t,1 /))
此案例包含在 nf90_put_var
的标准 netCDF 文档中
[1: http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-f90/NF90_005fPUT_005fVAR.html#NF90_005fPUT_005fVAR1]
我定义了一个变量,例如:
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;
如何定义数据的顺序?
对于 netcdf 中的变量定义和您要保存的变量的声明,维度必须采用相同的顺序。
netcdf 中变量的定义与您要实现的目标是正确的。所以你应该有VAR(o,t)
,索引的顺序必须在VAR
的初始化中改变。由于您希望矩阵的每一行都具有与 ncview 所见完全相同的值,因此我建议您将 Fortran 矩阵初始化为
var(:,1) = 5
var(:,2) = 2
var(:,3) = 8
var(:,4) = 9
这样一来,您就可以确保一切都做对了。请记住,fortran 中的维度顺序与 ncview 中的顺序不同。
我假设 IERREU = nf90_def_var(ncid, "var", nf90_real, (/ o, t /), VarID)
中的 (/ o, t /)
只是一个拼写错误,而你实际上有类似 IERREU = nf90_def_var(ncid, "var", nf90_real, (/ oid, tid /), VarID)
的东西,其中 oid
和 tid
是结果来自对 nf90_def_dim
的呼叫。如果是这种情况,您应该编辑 post。
如果您需要在程序中保持数组的维度顺序相同,但在 netCDF 文件中将其转置,那么您有两种选择。
只写转置
IERREU = nf90_put_var(ncid, VarID, transpose(VAR))
或使用map
向量参数
IERREU = nf90_put_var(ncid, VarID, VAR, map=(/ t,1 /))
此案例包含在 nf90_put_var
[1: http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-f90/NF90_005fPUT_005fVAR.html#NF90_005fPUT_005fVAR1]