爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8697|回复: 7

请教,conform的应用出错,提示“fatal:Number of dimensions on right hand side ...

[复制链接]
发表于 2014-6-12 17:08:18 | 显示全部楼层 |阅读模式

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

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

x
conform的应用,感觉没错,但是还是提示了“fatal:Number of dimensions on right hand side do not match number of dimension in left hand side”

begin
  diri = "/mnt/hgfs/E/WUTIP/dat/"
  fili1 = "ERA.temp.0920-1005.nc"
  fili2 = "ERA.uv.0920-1005.nc"
  fili3 = "ERA.rh.0920-1005.nc"
  fili4 = "ERA.surf.0920-1005.nc"

  diro = "/mnt/hgfs/E/WUTIP/dat/pic/"
  filo = "tse_lat-time"

  f1  = addfile(diri+fili1,"r")
  f2  = addfile(diri+fili2,"r")
  f3  = addfile(diri+fili3,"r")
  f4  = addfile(diri+fili4,"r")
  tk   = short2flt(f1 ->t(:,{1000:200},{20.25},{110.25}))
  u    = short2flt(f2 ->u(:,{1000:200},{20.25},{110.25}))
  v    = short2flt(f2 ->v(:,{1000:200},{20.25},{110.25}))
  rh   = short2flt(f3 ->r(:,{1000:200},{20.25},{110.25}))
  p    = short2flt(f4 ->msl(:,{20.25},{110.25}))
  u!0 ="time"
  u!1 ="lev"
  pressure_levels = (/1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,700.,650.,600.,550.,500.,\
               450.,400.,350.,300.,250.,225.,200./)
  nlevels         = dimsizes(pressure_levels)       ; number of pressure levels
;计算假相当位温
   p = conform(u(time|:,lev|:),pressure_levels,1)
  a1= where(tk.gt.263.0,0.622*6.11*exp(17.26*(tk-273.16)/(tk-35.86)),0.622*6.11*exp(21.87*(tk-273.16)/(tk-7.66)))
   b1= where(tk.gt.263.0,p-0.278*exp(17.26*(tk-273.16)/(tk-35.86)),p-0.278*exp(21.87*(tk-273.16)/(tk-7.66)))
   qs1=a1/b1
   q1=qs1*rh
   e1=p*q1/100./(0.62197+q1/100.0)


   tk1=55.0+2840.0/(3.5*log(tk)-log(e1)-4.805)


   pot1=tk*(1000/p)^(0.2854*(1.0-0.28*q1/100.0))
   ept1=pot1*exp(((3376./tk1)-2.54)*q1/100.0*(1.0+0.81*q1/100.0))
   ept1@description = "0se"
   ept1@units = "K"  
   copy_VarCoords(u,ept1) ; assign coordinates

。。。


有哪位大神能帮我看一下吗?




来自群组: 中大气象人
密码修改失败请联系微信:mofangbao
发表于 2014-6-12 18:20:27 | 显示全部楼层
p = short2flt(f4 ->msl(:,{20.25},{110.25}))
p = conform(u(time|:,lev|:),pressure_levels,1)
p在conform之前有一次赋值了,是不是这个原因?
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-6-12 20:15:25 | 显示全部楼层
longlivehj 发表于 2014-6-12 18:20
p = short2flt(f4 ->msl(:,{20.25},{110.25}))
p = conform(u(time|:,lev|:),pressure_levels,1)
p在con ...

按我的理解:conform的作用就是把已知的p扩展为跟已知的u一样的维数,所以p本身应该是有值的,应该不是这里吧
密码修改失败请联系微信:mofangbao
发表于 2014-6-12 20:37:55 | 显示全部楼层
seafairy 发表于 2014-6-12 20:15
按我的理解:conform的作用就是把已知的p扩展为跟已知的u一样的维数,所以p本身应该是有值的,应该不是这 ...

conform(u(time|:,lev|:),pressure_levels,1)是把pressure_levels扩展呈u的大小,跟p有什么关系?

执行p = short2flt(f4 ->msl(:,{20.25},{110.25}))后,p就是一个只含有time维的一维数组,而conform(u(time|:,lev|:),pressure_levels,1)结果的大小跟u相同,是一个包含time和lev维的二维数组,那么将一个二维数组赋值给一维数组,难道不会出错吗?
密码修改失败请联系微信:mofangbao
发表于 2014-6-12 20:43:59 | 显示全部楼层
seafairy 发表于 2014-6-12 20:15
按我的理解:conform的作用就是把已知的p扩展为跟已知的u一样的维数,所以p本身应该是有值的,应该不是这 ...

根据你的意思,应该是这样写才对:
p := conform(u, p, 0)
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-6-12 20:53:02 | 显示全部楼层
longlivehj 发表于 2014-6-12 20:37
conform(u(time|:,lev|:),pressure_levels,1)是把pressure_levels扩展呈u的大小,跟p有什么关系?

执 ...

原来我的理解本身就是错的。。NCL初学呢,英文的理解能力有限,谢谢指正啊。。能否问一下这个符号 := 什么意思?
密码修改失败请联系微信:mofangbao
发表于 2014-6-12 21:08:39 | 显示全部楼层
seafairy 发表于 2014-6-12 20:53
原来我的理解本身就是错的。。NCL初学呢,英文的理解能力有限,谢谢指正啊。。能否问一下这个符号 := 什 ...

reassignment(再赋值)。
等号两边必须维数一致,再赋值的话就不受这个限制。相当于把变量先删除,然后重新定义并赋值。
就拿你的程序来说,完全可以把conform的结果用另外的变量名保存,但有时候想沿用conform前的变量名,同时因为conform之后维数发生变化,所以要用再赋值操作符。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-6-13 10:03:43 | 显示全部楼层
longlivehj 发表于 2014-6-12 21:08
reassignment(再赋值)。
等号两边必须维数一致,再赋值的话就不受这个限制。相当于把变量先删除,然后 ...

理解了,受教,谢谢。。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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