在netcdf文件中写入变量

时间:2015-12-17 15:22:47

标签: fortran netcdf

我定义了一个变量: 具有维度的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;

如何定义数据的顺序?

2 个答案:

答案 0 :(得分:2)

如果您需要在程序中保持数组的维度顺序相同,并将其转换为netCDF文件,那么您有两个选项。

只需编写转置

3XX

或使用IERREU = nf90_put_var(ncid, VarID, transpose(VAR))向量参数

map

IERREU = nf90_put_var(ncid, VarID, VAR, map=(/ t,1 /))

的标准netCDF文档中介绍了此案例

[1http://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)之类的内容,其中oidtid来自致电nf90_def_dim。如果是这种情况,您应该编辑您的帖子。