爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12943|回复: 11

如何把原来的nc资料中不同年份的变量写到同一个nc文件中?

[复制链接]
发表于 2016-3-14 19:56:06 | 显示全部楼层 |阅读模式

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

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

x
比如说我现在在原来的nc资料中把需要年份的变量都算出来了
vraon1=s(time|7,lat|:,lon|:)
vraon2=s(time|10,lat|:,lon|:)
vraon3=s(time|15,lat|:,lon|:)
vraon4=s(time|18,lat|:,lon|:)
  vraon5=s(time|26,lat|:,lon|:)
   vraon6=s(time|29,lat|:,lon|:)
vraon7=s(time|29,lat|:,lon|:)     
vraon8=s(time|35,lat|:,lon|:)
      vraon9=s(time|41,lat|:,lon|:)
       vraon10=s(time|44,lat|:,lon|:)
        vraon11=s(time|48,lat|:,lon|:)
       vraon12=s(time|55,lat|:,lon|:)
       vraon13=s(time|60,lat|:,lon|:)
       vraon14=s(time|71,lat|:,lon|:)
       vraon15=s(time|81,lat|:,lon|:)
       vraon16=s(time|83,lat|:,lon|:)
       vraon17=s(time|87,lat|:,lon|:)
       vraon18=s(time|93,lat|:,lon|:)
       vraon19=s(time|95,lat|:,lon|:)
       vraon20=s(time|99,lat|:,lon|:)
但是我想把这20个不同年份的值写到一个新的nc文件中,方便我求相关,或画连续的图?求大神指教。谢谢家园
密码修改失败请联系微信:mofangbao
发表于 2018-10-4 16:13:05 | 显示全部楼层
本帖最后由 haysen 于 2018-10-4 16:14 编辑

这个是我之前写的,前提上中间不却天

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"


begin

    ymdStrt    = 19520101                         ; start yyyymmdd
    ymdLast    = 20121231                         ; last
    yrStrt     = ymdStrt/10000
    yrLast     = ymdLast/10000

    obj_name = "SM1"
    value_name = "sm1"


    fdir       = "/home/water/"+obj_name+"/"

    fname      = "VIC_Output_China_"+value_name+"_"+yrStrt+".nc"
    f          = addfile(fdir+fname,"r")
    value_temp  = f->$value_name$
    printVarSummary(value_temp)
    dims = dimsizes(value_temp)

    values = new((/366*(yrLast-yrStrt+1),dims(1),dims(2)/),typeof(value_temp))

    delete(value_temp)
    delete(f)

    day_nums =0

    do i = yrStrt,yrLast
        print(i+" ")
        fname      = "VIC_Output_China_"+value_name+"_"+i+".nc"
        f          = addfile(fdir+fname,"r")
        value_temp  = f->$value_name$
        dims = dimsizes(value_temp)
        values(day_nums:day_nums + dims(0)-1,:,:) = value_temp
        day_nums = day_nums + dims(0)
        delete(value_temp)
    end do

    print("read year ok")

    value_temp = values(0:day_nums-1,:,:)
    delete(values)

   
    time            = ispan(0,day_nums-1,1)
    time@units      = "days since "+yrStrt+"-01-01"
    time@calendar   = "standard"

    lat = f->lat
    lon = f->lon

    outputFileName  = "../../output/daily_"+value_name+"_"+yrStrt+"_"+yrLast+".nc"

    sysString = "/bin/rm -f "+outputFileName;
    system(sysString)

    ncdf                     = addfile(outputFileName,"c")        ;//打开文件
    filedimdef(ncdf,"time",-1,True)                                        ;//设置时间维度
    temp            = value_temp
    temp!0                = "time"                                                 ;//第一维名字设置成time
    temp!1                = "lat"                                             ;//第二维名字设置成Lat
    temp!2               = "lon"                                                        ;//第三维名字设置成lon
    temp&time              = time                                                        ;//保存time
    temp&lat              = lat                                    ;//保存lat
    temp&lon              = lon                                                        ;//保存lon
    temp@short_field_name        = value_temp@short_field_name
    temp@long_field_name        = value_temp@long_field_name
    temp@units            = value_temp@units                                                ;//设置单位
    temp@_FillValue = value_temp@_FillValue
    ncdf->$value_name$          = temp                                                        ;//将prcp保存到nc文件

    printVarSummary(temp)

    print("save Nc success")


end
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-3-14 19:57:28 | 显示全部楼层
为的是让这20个不连续的变量变成连续的。
密码修改失败请联系微信:mofangbao
发表于 2016-3-15 08:51:00 | 显示全部楼层
你建一个大数组,然后再复制进去咯
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-3-15 09:22:57 | 显示全部楼层
海盗船长 发表于 2016-3-15 08:51
你建一个大数组,然后再复制进去咯

谢谢您的回复,不好意思,刚开始学NCL,建立一个数组我应该能实现,但是怎么复制进去,而且我想要的是nc数据,方便使用一些函数。。。可以麻烦您能说的具体点吗?或者官网上哪有脚本什么的吗?谢谢您
密码修改失败请联系微信:mofangbao
发表于 2016-3-17 14:59:02 | 显示全部楼层
路过帮顶
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

 楼主| 发表于 2016-3-17 15:41:50 | 显示全部楼层
算解决了吧。我就用赋值的方法一个个赋值做的,这样也能得到我要的结果
密码修改失败请联系微信:mofangbao
发表于 2016-3-18 10:43:25 | 显示全部楼层
这个只能数组赋值呀。。。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-3-18 14:10:13 | 显示全部楼层
Adam-Lee 发表于 2016-3-18 10:43
这个只能数组赋值呀。。。

嗯,谢谢,我也是这么想的
密码修改失败请联系微信:mofangbao
发表于 2018-4-23 21:45:35 | 显示全部楼层
subtropical 发表于 2016-3-18 14:10
嗯,谢谢,我也是这么想的

楼主,能不能麻烦你把这段程序贴上看一下,谢谢~
密码修改失败请联系微信:mofangbao
发表于 2018-10-2 21:47:11 | 显示全部楼层
遇到相似的问题 求程序!!可以麻烦贴一下吗
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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