- 积分
- 1742
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-6-26
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 BDRUSH 于 2014-8-30 05:14 编辑
本人想通过NCL做出一段时间内区域降水的日变化数据,最后输出在同一个文本中。但是只能读入第一个文件,输出的文件中也只有第一个文件得到的区域平均降水的值,而后面的无法进行循环,其中出现的错误为:
fatal:Dimension sizes of left hand side and right hand side of assignment do not match
fatal:Execute: Error occurred at or near line 13 in file /cygdrive/c/Users/Administrator/Desktop/time_series.ncl
冥思苦想很久也最终得不出结果,望各位大神各显神通,帮助小弟我吧。
惯例@longlivehj ps:其中文本文件为micaps第三类文件
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"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
begin
str = new(184,string)
ascii_file = "time_series.txt"
diri = "/cygdrive/H/Data/pre/"
fils = systemfunc ("ls "+ diri + "13*.000")
d = dimsizes(fils)
do q = 0 ,d-1
c = asciiread(fils(q),-1,"string") ; 第13行
delim = " "
zlon = stringtofloat(str_get_field(c(11::),2,delim))
zlat = stringtofloat(str_get_field(c(11::),3,delim))
zpre = stringtofloat(str_get_field(c(11::),5,delim))
t0 = 0
t1 = 0
i = 0
n = 0
j = 0
m = dimsizes(zpre)
do i = 0,m-1 ;循环有多少个站点
if((zlon(i).ge.119.).and.(zlon(i).le.135)) then
if((zlat(i).ge.38).and.(zlat(i).le.54)) then
n=n+1
end if
end if
end do
alon = new(n,float)
alat = new(n,float)
apre = new(n,float)
do i=0,m-1
if((zlon(i).ge.119.).and.(zlon(i).le.135)) then
if((zlat(i).ge.38).and.(zlat(i).le.54)) then
alon(j)=zlon(i)
alat(j)=zlat(i)
apre(j)=zpre(i)
j=j+1
end if
end if
end do
olon = ispan(119,135,1) ;olon = ispan(90,126,1)
olat = ispan(38,54,1) ;olat = ispan(22,34,1)
olon!0 = "lon"
olon@long_name = "lon"
olon@units = "degree_east"
olon&lon = olon
olat!0 = "lat"
olat@long_name = "lat"
olat@units = "degree_north"
olat&lat = olat
zpre@_FillValue = -999.000000
zpre@missing_value = zpre@_FillValue
rscan = (/5,3,1,0.5/)
data1 = obj_anal_ic_Wrap(alon,alat,apre,olon,olat,rscan,False
data1@_FillValue = -999.000000
data1@missing_value = data1@_FillValue
a = new(16,float)
N = new(16,integer)
a(0) = sum(data1(3:5,2))
N(0) = num(.not.ismissing(data1(3:5,2)))
a(0) = a(0)/N(0)
a(1) = sum(data1(0:7,3))
N(1) = num(.not.ismissing(data1(0:7,3)))
a(1) = a(1)/N(1)
a(2) = sum(data1(0:10,4))
N(2) = num(.not.ismissing(data1(0:10,4)))
a(2) = a(2)/N(2)
a(3) = sum(data1(0:12,5))
N(3) = num(.not.ismissing(data1(0:12,5)))
a(3) = a(3)/N(3)
a(4) = sum(data1(0:12,6))
N(4) = num(.not.ismissing(data1(0:12,6)))
a(4) = a(4)/N(4)
a(5) = sum(data1(0:12,7))
N(5) = num(.not.ismissing(data1(0:12,7)))
a(5) = a(5)/N(5)
if(all(ismissing(data1(14,7)))) then
a(6) = 0
t0 = 0
else
a(6) = sum(data1(14,7))
t0 = 1
end if
a(7) = sum(data1(0:14,8))
N(7) = num(.not.ismissing(data1(0:14,8)))
a(7) = a(7)/N(7)
a(8) = sum(data1(1:15,9))
N(8) = num(.not.ismissing(data1(1:15,9)))
a(8) = a(8)/N(8)
a(9) = sum(data1(0:11,10))
N(9) = num(.not.ismissing(data1(0:11,10)))
a(9) = a(9)/N(9)
N(10) = num(.not.ismissing(data1(14:15,10)))
if(N(10).eq.0) then
a(10) = 0
t1 = 0
else
a(10) = sum(data1(14:15,10))
a(10) = a(10)/N(10)
t1 = 1
end if
a(11) = sum(data1(0:11,11))
N(11) = num(.not.ismissing(data1(0:11,11)))
a(11) = a(11)/N(11)
a(12) = sum(data1(0:8,12))
N(12) = num(.not.ismissing(data1(0:8,12)))
a(12) = a(12)/N(12)
a(13) = sum(data1(1:8,13))
N(13) = num(.not.ismissing(data1(1:8,13)))
a(13) = a(13)/N(13)
a(14) = sum(data1(2:7,14))
N(14) = num(.not.ismissing(data1(2:7,14)))
a(14) = a(14)/N(14)
a(15) = sum(data1(2:6,15))
N(15) = num(.not.ismissing(data1(2:6,15)))
a(15) = a(15)/N(15)
if(t0.eq.0.and.t1.eq.0) then
pre= sum(a)/14
else
if(t0.eq.0.and.t1.eq.1) then
pre = sum(a)/15
else
if(t0.eq.1.and.t1.eq.0) then
pre = sum(a)/15
else
if(t0.eq.1.and.t1.eq.1) then
pre = sum(a)/16
end if
end if
end if
end if
str(q) = sprintf("%9.5f", pre)
asciiwrite(ascii_file, str(q))
end do
end
|
|