爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: subtropical

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

[复制链接]
发表于 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

使用道具 举报

发表于 2020-2-26 21:31:38 | 显示全部楼层
subtropical 发表于 2016-3-17 15:41
算解决了吧。我就用赋值的方法一个个赋值做的,这样也能得到我要的结果

你好,请问你是怎么赋值的,我写入的文件只保留了最后一个文件,不知道咋搞,我也是刚学
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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