爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14091|回复: 12

NCL处理数据

[复制链接]

新浪微博达人勋

发表于 2014-9-5 09:56:27 | 显示全部楼层 |阅读模式

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

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

x
请教大家给指点错误!附件中的数据spectral_irradiance_Lean_1610-2009_ann_c100405.nc一共有8个变量,具体文件说明如下

dimensions:
     ncl_scalar = 1
     time = 400  // unlimited
     ref_time_bound = 2
     wavelength = 3780
  variables:
     double tsi_ref ( ncl_scalar )
        time_op :        average
        bounds : ref_time_bound
        _FillValue :      -9999
        long_name :  average of tsi overref_time_bound inclusive
        units :     W/m^2
        average_op_ncl :   dim_avg overdimension: time
     double ref_time_bound ( ref_time_bound )
        units :     days since 0000-01-0100:00:00
        long_name :  reference timeinterval boundaries
        _FillValue :      -9999
     integer date ( time )
        format : YYYYMMDD
        _FillValue :      -9999
     double time ( time )
        calendar :       noleap
        axis :       T
        time_origin :  01-JAN-0000
        units :     days since 0000-01-0100:00:00
        _FillValue :      -9999
     double wavelength ( wavelength )
        units :     nm
        long_name :  Wavelength of bandcenter
        _FillValue :      -9999
     double band_width ( wavelength )
        units :     nm
        long_name :  Wavelength width ofband
        _FillValue :      -9999
     double ssi_ref ( wavelength )
        time_op :        average
        bounds : ref_time_bound
        _FillValue :      -9999
        long_name :  average of ssi overref_time_bound inclusive
        units :     mW/m^2/nm
        average_op_ncl :   dim_avg overdimension: time
     double tsi ( time )
        units :     W/m^2
        long_name :  Total Solar Irradianceat 1 a.u.
        _FillValue :      -9999
     double ssi ( time, wavelength )
        units :     mW/m^2/nm
        long_name :  Solar SpectralIrradiance at 1 a.u.
        _FillValue :      -9999

我主要是想对源数据ssi中的一部分进行放大,然后再将放大的这部分赋值给源数据,其他不变。


这是我的ncl脚本,处理之后我挨着变量看,数值都正确,但是把这个数据放到模式中,数据有错误,我想是不是格式有问题,请大家帮着看一下,十分的感谢。

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
;---------------------
begin
;---------------------

in= addfile("/cmb/g5/dongshi/ssi/spectral_irradiance_Lean_1610-2009_ann_c100405_1.nc","w")

ssi= in->ssi
time=in->time
wavelength=in->wavelength

ntime=dimsizes(time)
nwavelength=dimsizes(wavelength)

printVarSummary(ssi)
cssi= new((/400,3780/),"double",ssi@_FillValue)
do ilt=0,ntime-1
  do ilw=0,nwavelength-1
    if((ilw.le.249).and.(ilw.gt.79)) then
    cssi(ilt,ilw)=ssi(ilt,ilw)*0.8
    else
    cssi(ilt,ilw)=ssi(ilt,ilw)
    end if
  end do
end do
copy_VarAtts(ssi,cssi)
printVarSummary(cssi)
in->ssi=cssi



end



spectral_irradiance_Lean_1610-2009_ann_c100405.nc

11.63 MB, 下载次数: 15, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-5 12:00:16 | 显示全部楼层
本帖最后由 longlivehj 于 2014-9-5 12:02 编辑

“挨着变量看,数值都正确;放到模式中,数据有错误”,到底是正确还是错误啊?错误的详情?
程序看上去没啥问题,有两点看法供楼主参考:
1. 从nc文件的命名来看,楼主是做过备份了,这个好!但是,仍要小心对同一个文件重复操作,比如调试程序时反复运行程序。
2. 循环会大大降低程序执行效率。程序中的两层循环是没有必要的,直接指定数组下标进行修改。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-6 10:21:23 | 显示全部楼层
longlivehj 发表于 2014-9-5 12:00
“挨着变量看,数值都正确;放到模式中,数据有错误”,到底是正确还是错误啊?错误的详情?
程序看上去没 ...

谢谢版主。
运行是没有错误的,运行的数值也是正确的。
但是运行后的数据(spectral_irradiance_Lean_1610-2009_ann_c100405_1.nc)与原始数据(spectral_irradiance_Lean_1610-2009_ann_c100405.nc)除了数值之外,还有其他的问题。

昨天下午做了调整已经可以了
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"


;---------------------
begin
;---------------------

in= addfile("/cmb/g5/dongshi/ssi/spectral_irradiance_Lean_1610-2009_ann_c100405_20up.nc","w")

ssi= in->ssi

printVarSummary(ssi)

  do ilw=0,3779
    if((ilw .le. 249) .and. (ilw .gt. 79)) then
    ssi(:,ilw)=ssi(:,ilw)*1.2
    end if
  end do

in->ssi=ssi

end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-6 10:21:38 | 显示全部楼层
longlivehj 发表于 2014-9-5 12:00
“挨着变量看,数值都正确;放到模式中,数据有错误”,到底是正确还是错误啊?错误的详情?
程序看上去没 ...

是原来想复杂了,确实是循环嵌套了两层,这NCL直接罢工了。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-6 11:18:50 来自手机 | 显示全部楼层
loftydongshi 发表于 2014-9-6 10:21
是原来想复杂了,确实是循环嵌套了两层,这NCL直接罢工了。。

不用循环,把下标范围指定一下!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-7 22:27:54 | 显示全部楼层
longlivehj 发表于 2014-9-6 11:18
不用循环,把下标范围指定一下!

我真是犯二了。。就是嘛。。。(:,70:249)不就得了。。。。转模式转的头都晕了。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-8 15:41:29 | 显示全部楼层
正好学习一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-1 23:00:30 | 显示全部楼层
{:eb502:}{:eb502:}{:eb502:}{:eb502:}{:eb502:}正好学习一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-7-16 20:34:47 | 显示全部楼层
楼主我想问个问题,我在处理数据的时候需要把一个三维的(year,lat,lon)付给四维的(year,day,lat,lon)第九十一天的数值day=90,出现fatal: Assignment type mismatch, right hand side can't be coerced to type o left hand side三次。。怎么处理比较合适呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-7-18 09:22:20 | 显示全部楼层
四月雨之音 发表于 2016-7-16 20:34
楼主我想问个问题,我在处理数据的时候需要把一个三维的(year,lat,lon)付给四维的(year,day,lat,lon)第九 ...

没大懂你的意思,第九十一天的数值?如果三维的数组付给四维数组时已经定义好单点某个时刻就不会出现这种问题了,可否把程序贴一下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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