爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6277|回复: 7

[作图] 青藏高原轮廓及do循环使用

[复制链接]

新浪微博达人勋

发表于 2020-1-31 22:00:25 | 显示全部楼层 |阅读模式

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

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

x
麻烦请教大家几个问题


1.如何绘制青藏高原轮廓,
我参考关于ncl添加青藏高原轮廓图
http://bbs.06climate.com/forum.p ... &fromuid=121769
(出处: 气象家园)
下载了青藏高原的.shp文件后,在代码中添加了
shptp="../add_TP/DBATP_Line.shp"

res = True
res@gsLineColor = "black"     
res@gsLineThicknessF = 15              
shp_plot2 = gsn_add_shapefile_polylines(wks,contour,shptp,res)
运行后没有报错,但是图片上也没有添加青藏高原的轮廓
2.如何使用ncl写do循环
我希望得到青藏高原的太阳辐射收支总量,数据(接收到的辐射量)是三维,第一维是时间,第二维是纬度,第三维是经度。
我的思路是将高原化成网格点,每一个格点对应一个数据,将这些数据加起来,就是全部的辐射收入。
我写了一个这样的do循环:
do i=25,45
  do j=70,110
    m=m+t
  enddo
enddo

系统报错
请大家指导^-^      


谢谢大家!

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

新浪微博达人勋

发表于 2020-2-1 09:22:45 | 显示全部楼层
end do 是两个词吧?中间有个空格?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 0
发表于 2020-2-1 09:49:27 | 显示全部楼层
packard 发表于 2020-2-1 09:22
end do 是两个词吧?中间有个空格?

可以不加的,不要紧
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-1 10:05:48 | 显示全部楼层
packard 发表于 2020-2-1 09:22
end do 是两个词吧?中间有个空格?

谢谢您!确实改了之后报错少了,但是还有一个小问题
fatal:Dimension sizes of left hand side and right hand side of assignment do not match
fatal:["Execute.c":8640]:Execute: Error occurred at or near line 5 in file totol.ncl
我的代码是这样的
begin
a = addfile("out-jjas-mean.nc","r")
t=new((/1,21,41/),float)
m=new(1,float)
t=a->ini_sfc_sw_down_all_mon(0,:,:)
do i=25,45
  do j=70,110
    m=m+t
  end do
end do
n=m/(21*41)
print(m)
end
麻烦您帮我看看,谢谢^_^
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-1 10:11:05 | 显示全部楼层
言深深 发表于 2020-2-1 09:49
可以不加的,不要紧

谢谢您!可能我安装的版本有点点低,end do需要分开
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-2-1 13:04:25 | 显示全部楼层
PDR 发表于 2020-2-1 10:05
谢谢您!确实改了之后报错少了,但是还有一个小问题
fatal:Dimension sizes of left hand side and righ ...

试试以下?
  1. begin
  2. a = addfile("out-jjas-mean.nc","r")
  3. t=a->ini_sfc_sw_down_all_mon(0,:,:)
  4. m=avg(t(25:45,70:110))
  5. print(m)
  6. end
复制代码
1. NCL可以不必预先定义变量, 直接赋值整个矩阵t, 这样没有矩阵大小不匹配的问题 (见第2,5点).
2. 选中 (0,:,:) 以后, 就是一个21*41的二维数组. 如果选中 (0:0,:,:), 还能是个1*21*41的三维数组.

3. 用new生成的变量m会是缺省值, 不是0, 以后的加法运算还会是缺省值.
4. 如果你要 m=m+t, 应该是m=m+t(i,j) 之类的.
5. 在这里似乎你的数组 t 比21*41要大.
6. NCL定义了很多方便你的函数, 应该多利用. 以及NCL应该尽量避免使用循环 (尽量用函数). 如果简单算术平均, 忽略低纬度格点的面积可能大一些的话, 直接用avg函数就好.
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-2-1 13:17:48 | 显示全部楼层
本帖最后由 packard 于 2020-2-1 13:19 编辑

我的版本(6.6.2)大概是太新了, end do好像也只能是两个词[调皮]
ncl_enddo.PNG
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-1 17:35:51 | 显示全部楼层
packard 发表于 2020-2-1 13:04
试试以下?
1. NCL可以不必预先定义变量, 直接赋值整个矩阵t, 这样没有矩阵大小不匹配的问题 (见第2,5点) ...

哇!您真的是太厉害了!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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