爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11963|回复: 0

[经验总结] 利用函数事先定义NetCDF属性实现nc文件的输出

[复制链接]

新浪微博达人勋

发表于 2020-7-1 20:56:59 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
想要以NetCDF格式保留滤波后的数据,但在数据处理之后如果像之前合并多年数据那样直接写入,无法保留时间维度信息,然而我还想把这个数据保存好以便后续使用,因此采取了用函数事先定义的方法,在这里记录一下。
读入文件:
  1. f1 = addfile(pt+"pres.sfc.1979-2019.nc", "r")

  2. pres = f1->pres/100
  3. printVarSummary(pres)
  4. lat = f1->lat
  5. lon = f1->lon
  6. time = f1->time

  7. nlat = dimsizes(lat)
  8. nlon = dimsizes(lon)
复制代码
进行一些数据处理(进行7-90天带通滤波)
  1. ihp = 2                                         ; band pass
  2. sigma = 1.0                                     ; Lanczos sigma
  3. nWgt = 201                                      ; loose 100 each end
  4. fca = 1./90.                                   ; start freq
  5. fcb = 1./7.                                    ; last freq
  6. wgt = filwgts_lanczos (nWgt, ihp, fca, fcb, sigma )
  7.                
  8. plcz = wgt_runave_n_Wrap(pres, wgt, 0, 0)                ; 7-90 day
复制代码
输出变量
  1.    system("rm -rf ls F:/data/NCAR-Reanalysis1/pres.sfc.1979-2019_lb.nc")    ;删除可能存在的文件
  2.    fout = addfile("F:/data/NCAR-Reanalysis1/pres.sfc.1979-2019_lb.nc","c")  ;创建文件

  3.    setfileoption(fout, "DefineMode", True)

  4.    ;定义文件的全局属性
  5.    fAtt   = True
  6.    fAtt@title  = "NetCDF output using method 2"
  7.    fAtt@creation_date = systemfunc("date")
  8.    fileattdef(fout, fAtt)

  9.    ;定义坐标变量
  10.    dimNames = (/ "time","lat","lon"/)       ;命名维
  11.    dimSizes = (/   -1,   nlat, nlon/)       ;维大小,-1表示未知
  12.    dimUnlim = (/   True, False,False/)      ;定义是否不限定维
  13.    filedimdef(fout, dimNames, dimSizes, dimUnlim)

  14.    ;定义变量名,变量属性和维度
  15.    filevardef(fout, "time", typeof(time), getVarDimNames(time))
  16.    filevardef(fout, "lat", typeof(lat), getVarDimNames(lat))
  17.    filevardef(fout, "lon", typeof(lon), getVarDimNames(lon))
  18.    filevardef(fout, "plcz", "float", (/ "time","lat","lon"/))
  19.    ;给每个变量复制属性
  20.    filevarattdef(fout, "time", time)
  21.    filevarattdef(fout, "lat", lat)
  22.    filevarattdef(fout, "lon", lon)
  23.    filevarattdef(fout, "plcz", plcz)
  24.    ;将数据写入文件,仅需写入数据,变量属性已经在前面预先写入文件
  25.    fout->time = (/ time /)          ;用(/.../) 去除变量的元数据
  26.    fout->lat = (/ lat /)
  27.    fout->lon = (/ lon /)
  28.    fout->plcz = (/ plcz /)
复制代码


密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表