- 积分
- 499
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-7-29
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 奋豆儿 于 2020-4-27 10:29 编辑
因目前条件所限没有服务器可以使用,所以在本地安装cygwin调用NCL来插值interim数据,想一次性把所需的5个变量插值到新建的5个(124,11,251,461)大小的数组,出现如下错误提示,提示的错误是在新建第5个数组的语句位置(20行)。请大家指教!- f0=addfile("SWCWARMS_20180301000000_F00_P10.grb","r")
- u0=f0->U_GRD_GDS0_ISBL(:,{17:42},{77:123})
- v0=f0->V_GRD_GDS0_ISBL(:,{17:42},{77:123})
- z0=f0->HGT_GDS0_ISBL(:,{17:42},{77:123})
- t0=f0->TMP_GDS0_ISBL(:,{17:42},{77:123})
- q0=f0->SPF_H_GDS0_ISBL(:,{17:42},{77:123})
-
- mid_data_u=new((/124,11,251,461/),float,u0@_FillValue)
- mid_data_u!0="time"
- mid_data_u&time=ispan(0,123,1)
- mid_data_v=new((/124,11,251,461/),float,u0@_FillValue)
- mid_data_v!0="time"
- mid_data_v&time=ispan(0,123,1)
- mid_data_z=new((/124,11,251,461/),float,u0@_FillValue)
- mid_data_z!0="time"
- mid_data_z&time=ispan(0,123,1)
- mid_data_q=new((/124,11,251,461/),float,u0@_FillValue)
- mid_data_q!0="time"
- mid_data_q&time=ispan(0,123,1)
- mid_data_t=new((/124,11,251,461/),float,u0@_FillValue)
- mid_data_t!0="time"
- mid_data_t&time=ispan(0,123,1)
- ;print (f0->lv_ISBL0)
- copyatt(mid_data_u(0,:,:,:), u0)
- copyatt(mid_data_v(0,:,:,:), v0)
- copyatt(mid_data_z(0,:,:,:), z0)
- copyatt(mid_data_t(0,:,:,:), t0)
- copyatt(mid_data_q(0,:,:,:), q0)
- ;printVarSummary(mid_data_u)
-
- delete(f0)
- delete(u0)
- delete(v0)
- delete(z0)
- delete(t0)
- delete(q0)
-
-
- ;===determine the output file's name===
- m=mon+1
- if (mon .le. 9)
- output_nm="./"+"0"+mon+"01-"+"0"+m+"03"+"/"+year+"0"+mon+"01-"+"0"+m+"03inter.nc"
- else
- output_nm="./"+mon+"01-"+m+"03"+"/"+year+mon+"01-"+m+"03inter.nc"
- end if
- print(output_nm)
-
- ;=======time loop start======
- if (mon .le. 9)
- in_filenm="./"+"0"+mon+"01-"+"0"+m+"03"+"/"+year+"0"+mon+"01-"+"0"+m+"03.nc"
- else
- in_filenm="./"+mon+"01-"+m+"03"+"/"+year+mon+"01-"+m+".nc"
- end if
- print(in_filenm)
-
-
- f1=addfile("./SWCWARMS_20180301000000_F00-72_P10.nc","r")
- f2=addfile(in_filenm,"r")
-
- lat_fore=f1->g0_lat_0
- lon_fore=f1->g0_lon_1
-
- lat_obs=f2->latitude(::-1)
- lon_obs=f2->longitude
-
- levels=(/100, 200, 250, 300, 400, 500, 600, 700, 850, 925, 1000/)
- do i=0, 10
- obs1_z_cli=f2->z(:,{levels(i)},::-1,:)
- obs1_u_cli=f2->u(:,{levels(i)},::-1,:)
- obs1_v_cli=f2->v(:,{levels(i)},::-1,:)
- obs1_t_cli=f2->t(:,{levels(i)},::-1,:)
- obs1_q_cli=f2->q(:,{levels(i)},::-1,:)
-
- obs_u_cli=linint2_Wrap (lon_obs,lat_obs,obs1_u_cli, False, lon_fore,lat_fore, 0)
- obs_v_cli=linint2_Wrap (lon_obs,lat_obs,obs1_v_cli, False, lon_fore,lat_fore, 0)
- obs_t_cli=linint2_Wrap (lon_obs,lat_obs,obs1_t_cli, False, lon_fore,lat_fore, 0)
- obs_q_cli=linint2_Wrap (lon_obs,lat_obs,obs1_q_cli, False, lon_fore,lat_fore, 0)
- obs_z_cli=linint2_Wrap (lon_obs,lat_obs,obs1_z_cli, False, lon_fore,lat_fore, 0)
-
- mid_data_z(:, {levels(i)}, :,:) = obs_z_cli(:,:,:)
- mid_data_u(:, {levels(i)}, :,:) = obs_u_cli(:,:,:)
- mid_data_v(:, {levels(i)}, :,:) = obs_v_cli(:,:,:)
- mid_data_t(:, {levels(i)}, :,:) = obs_t_cli(:,:,:)
- mid_data_q(:, {levels(i)}, :,:) = obs_q_cli(:,:,:)
- end do
- setfileoption("nc", "Format", "NetCDF4")
- a = systemfunc("rm -f " + output_nm)
- fout=addfile(output_nm, "c")
-
- fout->u=mid_data_u
- fout->v=mid_data_v
- fout->z=mid_data_z
- fout->t=mid_data_t
- fout->q=mid_data_q
- delete(fout)
复制代码
根据提示查了一下,可能是因为数组太大内存(本地台式机内存6G)不够的原因,所以考虑一个变量一个变量插值,对不同年份的数据进行年循环,先用变量U试了一下代码如下:
- do mon=2, 2
- do year=2001, 2018
-
- ;===determine the output file's name===
- m=mon+1
- if (mon .le. 9)
- output_nm="./"+"0"+mon+"01-"+"0"+m+"03"+"/"+year+"0"+mon+"01-"+"0"+m+"03inter.nc"
- else
- output_nm="./"+mon+"01-"+m+"03"+"/"+year+mon+"01-"+m+"03inter.nc"
- end if
- print(output_nm)
-
- ;=======time loop start======
- if (mon .le. 9)
- in_filenm="./"+"0"+mon+"01-"+"0"+m+"03"+"/"+year+"0"+mon+"01-"+"0"+m+"03.nc"
- else
- in_filenm="./"+mon+"01-"+m+"03"+"/"+year+mon+"01-"+m+".nc"
- end if
- print(in_filenm)
-
-
- f1=addfile("./SWCWARMS_20180301000000_F00-72_P10.nc","r")
- f2=addfile(in_filenm,"r")
-
- lat_fore=f1->g0_lat_0
- lon_fore=f1->g0_lon_1
-
- lat_obs=f2->latitude(::-1)
- lon_obs=f2->longitude
-
- levels=(/100, 200, 250, 300, 400, 500, 600, 700, 850, 925, 1000/)
- f0=addfile("SWCWARMS_20180301000000_F00_P10.grb","r")
- u0=f0->U_GRD_GDS0_ISBL(:,{17:42},{77:123})
- v0=f0->V_GRD_GDS0_ISBL(:,{17:42},{77:123})
- z0=f0->HGT_GDS0_ISBL(:,{17:42},{77:123})
- t0=f0->TMP_GDS0_ISBL(:,{17:42},{77:123})
- q0=f0->SPF_H_GDS0_ISBL(:,{17:42},{77:123})
-
- mid_data_u=new((/124,11,251,461/),float,u0@_FillValue)
- mid_data_u!0="time"
- mid_data_u&time=ispan(0,123,1)
- copyatt(mid_data_u(0,:,:,:), u0)
- delete(u0)
- do i=0, 10
- obs1_u_cli=f2->u(:,{levels(i)},::-1,:)
- obs_u_cli=linint2_Wrap (lon_obs,lat_obs,obs1_u_cli, False, lon_fore,lat_fore, 0)
- mid_data_u(:, {levels(i)}, :,:) = obs_u_cli(:,:,:)
- end do
-
-
- setfileoption("nc", "Format", "NetCDF4")
- a = systemfunc("rm -f " + output_nm)
- fout=addfile(output_nm, "c")
-
- fout->u=mid_data_u
- ; fout->v=mid_data_v
- ; fout->z=mid_data_z
- ; fout->t=mid_data_t
- ; fout->q=mid_data_q
- delete(fout)
- delete(obs1_u_cli)
- delete(f2)
- delete(i)
- end do
- end do
复制代码 结果第一年的结果出来了没有问题,第二年插值又不行了,提示如下(错误提示2),不知道是不是还是内存不够的问题?试过把第一年数据插值使用过的数组都清空还是一样的提示,所提示的语句为50行obs1_u_cli=f2->u(:,{levels(i)},::-1,:) 感觉没啥问题。
|
-
错误提示
-
错误提示2
|