【问题标题】:write variable in netcdf file在 netcdf 文件中写入变量
【发布时间】:2015-12-18 09:14:10
【问题描述】:

我定义了一个变量,例如: 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;

如何定义数据的顺序?

【问题讨论】:

  • latVAR是什么关系?请澄清您的问题。
  • 对不起,这是一个错误...
  • 您能否添加定义您的 netcdf 变量 (varID) 的代码行?您使用什么(软件)来可视化 netcdf 中的数据?
  • 我已添加该行。我使用 ncview ...

标签: fortran netcdf


【解决方案1】:

如果您需要在程序中保持数组的维度顺序相同但在 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]

【讨论】:

    【解决方案2】:

    对于 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 的结果。如果是这种情况,您应该编辑您的帖子。

    【讨论】:

    • 你是对的,在我的代码中是/oid, tid/。我在矩阵 VAR 中使用了相同的值,但这只是为了说明我的问题并简化事情。
    猜你喜欢
    • 2013-02-19
    • 2023-04-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多