将GrADS(.grd)转换为NetCDF(.nc)?

时间:2015-09-04 04:55:01

标签: netcdf ferret grads

我的文件包含.grd格式的6小时间隔(每天4个文件)的大气数据。我也有相关的描述符文件(yyyymmddhh.ctl)。我可以使用GrADS绘制数据。但我需要将这些文件转换为NetCDF格式(.nc),以便在ferrert的帮助下对其进行可视化。有谁知道怎么做?

3 个答案:

答案 0 :(得分:5)

我强烈建议您使用CDO将文件转换为NetCDF。在对.nc文件进行简单操作时,使用CDO或NCO几乎总是最佳选择。 根据我的经验,当正确的操作员可用时,CDO通常比使用Python或R更安全,更快。

e.g:

cdo -f nc import_binary in_grads.ctl out_ncdf.nc

您可以在CDO论坛的某些主题上找到更多相关信息:

https://code.zmaw.de/boards/1/topics/1031

https://code.zmaw.de/boards/1/topics/213

PS:CDO提示:当链接多个CDO运算符时,使用-L选项来避免段错误,并考虑使用虚拟RAM空间(大多数Linux发行版上的/ dev / shm)来临时文件以避免磁盘写入。

答案 1 :(得分:4)

你绝对应该使用Climate Data Operators (CDO)来做类似的事情:

cdo -f nc import_binary in.ctl out.nc 

如果要处理大量文件,可能需要编写脚本来处理它们。

例如,我有一个带有来自COAMPS模型的一堆GrADS文件的tar文件,当解压缩时会生成121对.dat.cdl文件,其名称如下:

COTC.18L.2012102512.000.ctl
COTC.18L.2012102512.000.dat
COTC.18L.2012102512.001.ctl
COTC.18L.2012102512.001.dat
COTC.18L.2012102512.002.ctl
COTC.18L.2012102512.002.dat
...

所以我写了一个小的bash脚本:

#!/bin/bash
for file in *.ctl
do
   fname=${file%.ctl}
   cdo -f nc import_binary ${fname}.ctl ${fname}.nc
   echo ${fname}.nc
done

将它们全部转换为netcdf。

注意#1 :构建CDO可能很棘手,但如果您使用的是Linux或Mac,则可以使用Conda进行安装。

如果还没有Conda,请安装Miniconda(免费)。以下是:

第1步。确保您有一个~.condarc,它看起来像这样:

$ more ~/.condarc
channels:
  - conda-forge
  - defaults

第2步。创建自定义CDO环境以运行CDO:

$ conda create --yes -n CDO python=3.6 cdo
$ source activate CDO

第3步。运行nco命令!

注意#2 :我还创建了一个NcML文件,以便在我的thredds数据服务器上虚拟聚合这些数据。该文件看起来像这样:

<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
    <aggregation dimName="time" type="joinExisting">
        <scan location="." regExp=".*COTC\.18L\.[0-9]{10}\.[0-9]{3}\.nc$"/>
    </aggregation>
</netcdf>

有关设置THREDDS数据服务器以处理此问题的详细信息,请参阅https://gis.stackexchange.com/questions/70919/setting-up-thredds-catalogs-for-ocean-model-data

答案 2 :(得分:0)

您可以使用sdfwrite命令使用GrADS写出netcdf数据。文档位于http://iges.org/grads/gadoc/gradcomdsdfwrite.html