在 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) 的东西,其中 oidtid 是结果来自对 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]