立即注册 登录
气象家园 返回首页

主啊的个人空间 http://bbs.06climate.com/?69999 [收藏] [复制] [分享] [RSS]

日志

ncl 学习笔记

已有 756 次阅读2017-4-27 20:35

实战参考博客              http://blog.sina.com.cn/s/blog_44f7c0840100on44.html
交互模式  -->ncl
               -->
批处理模式--> ncl  foll.ncl
百看不如一试
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"

begin
f    = addfile("/cygdrive/d/UV.nc","r")
print(f)
u=f->z(1,1,:,:)

wks  = gsn_open_wks("png","UV_contour")     ; send graphics to PNG file
plot = gsn_contour(wks,u,False)              ; contour the variable

end
  



不知道画出来的是什么

转发:NCL必备http://blog.sina.com.cn/s/blog_3eac55fd0101asqg.html

.在linux下安装NCL的方法
[这个贴子最后由first在 2007/04/14 06:09pm 编辑]

  从今天起想做一个系列,争取每天都能和大家分享一点NCL的东西,希望能得到大家的支持,本人也是新手,有写错的请及时指正,共同进步。 :em12:
  今天就从安装开始(本人不推荐在windows下面用这个软件,所以只写在linux下如何安装)

  NCL的下载地址: http://www.earthsystemgrid.org

  在这个网站上下东西要有注册帐号,申请一下就行了,一般要等一两天才能申请成功,所以新用户要耐心等待了。
  先弄清楚自己linux的类型,选择相应的版本下载。例如:我得linux版本是fedora4,32位机,我选择 ncl-4.2.0.a033.Linux_i686.tar.gz
  
   安装步骤:
      1.首先确定要安装在那个目录下,推荐/usr/local
      2.cd /usr/local
        解压文件:gunzip ncl-4.2.0.a033.Linux_i686.tar.gz 生成ncl-4.2.0.a033.Linux_i686.tar
        打开压缩包:tar -xvf ncl-4.2.0.a033.Linux_i686.tar,这时就会生成一系列的文件。
      3.设定环境变量:
        如果你在csh下
        setenv NCARG_ROOT /usr/local
        set path=(/usr/local/bin $path)
        如果你在bash下
        export NCARG_ROOT=/usr/local
        export PATH=(/usr/local/bin $PATH)
        可以把这些命令加到.cshrc 和 .bashrc 中,免得每次要用的时候现敲命令
      4.检查NCL是否安装成功:
        在shell命令行敲入ncl,如果出现的都是版本信息,没有警告,那就是安装成功了。

    注意:建议新手在安装linux的时候选择完全安装,否则再装NCL的时候会找不到一些库文件。
        今天就到这,明天介绍NCL中的一些基本的概念。
2.NCL简单语法、读取nc文件
[这个贴子最后由first在 2007/04/14 12:42pm 编辑]

进入ncl的两种方法:
1.直接在shell命令行输入ncl,就能进入ncl,然后一条一条执行命令,这种是交互式的执行方式。
2.编好一个ncl脚本,在shell命令行输入ncl filename.ncl就可以了,这种是批处理的执行方式。
一些特殊的行:注释行;      续行 \   
数据类型:
  数值型:double(64 bit) , float(32 bit), long(32 bit), integer(32 bit), short(16 bit),byte(8 bit),不支持complex。
非数值型:字符串(string)、字符(character)、图形(graphic)、文件(file)、逻辑型(logical)、列表(list)
运算符:
   + 加法,也用在字符串的连接中
   - 减法
   * 乘法
   ^ 指数运算
   % 求模 (只适用于整数)
   # 矩阵相乘
   >,< 大于、小于
逻辑运算符:
   .lt.   小于
   .le.   小于等于
   .gt.   大于
   .ne.   不等于
   .eq.   等于
   .and.  和、并且
   .or.   或
   .xor.  exclusive or除……或
   .not.  非
变量:
    ncl中的变量名必须以字母开头,但是后面可以是数值字母混合,下划线_也可以用在变量名中。每个变量都有其附属的信息(也称作meta data),这些附属的信息可以通过ncl的命令来获得、建立、修改、删除。
eg :  
> ncl                                       ; 进入到ncl
> f=addfile("ho.contr.TEMP.mon.nc","r")     ;以只读的方式打开文件ho.contr.TEMP.mon.nc ,这时f就是文件的属性信息了
> print(f)                                  ;查看f的值,print是ncl中显示变量值的命令,下面就是一个输出的例子,文件头没有给出
   dimensions:
      time = 360  // unlimited
      lev = 32
      lat = 128
      lon = 128
   variables:
      float TEMP ( time, lev, lat, lon )
         long_name :    Temperature
         units :        C
         missing_value :        9e+20
      float lat ( lat )
         long_name :    latitude
         units :        degrees_north
      float lev ( lev )
         long_name :    ocean depth
         units :        meters
      float lon ( lon )
         long_name :    longitude
         units :        degrees_east
      float time ( time )
         long_name :    time
         units :        days since 0000-01-01 00:00:00
   从输出的信息我们就能看到这个文件有5个变量、其中有四个是坐标变量、一个是温度变量,温度是四维的变量,还可以看见每个变量的维数,各个维的长度,维的名称、单位等等。
读取变量TEMP的值:
   temp=f->TEMP        ; 把文件f中的变量TEMP赋给temp,一定要注意文件中变量名的大小写,当然temp你可以随便命名。
   这是最好不要print(temp),因为我们可以看到temp是个(360*32*128*128)得数组,如果你想刷屏那可以这么做。
   这是想看变量的信息可以通过命令printVarSummary(temp)来看
  > printVarSummary(temp)
Variable: temp
Type: float
Total Size: 754974720 bytes
            188743680 values
Number of Dimensions: 4
Dimensions and sizes:   [time | 360] x [lev | 32] x [lat | 128] x [lon | 128]
Coordinates:
            time: [281910..292680]
            lev: [-5500..-20]
            lat: [-89.29688..89.29688]
            lon: [1.40625..358.5938]
Number Of Attributes: 3
  long_name :   Temperature
  units :       C
  missing_value :       9e+20
   还可以抽出变量中的一部分数据来读: ncl中变量的维数是从0开始的(要切记)
   temp=f->TEMP  ; 这就是把TEMP的所有值都读出来
   temp2=f->TEMP(0,31,:,:) ;这就是取第一时刻,第32层的所有温度值
   temp3=f->TEMP(0,31,::5,:) ; 取第一时刻,第32层,每隔5个纬度,所有经度取值
   temp2,temp3现在就是一个平面的数据了,这就是所谓的维数退化(dimension reduction),这时可以print(temp2)
   通过这种addfile,f->TEMP的赋值方式,TEMP中的所有meta data也同时被赋过去。
变量维数及属性表示方法:
@ 表示变量的属性,例如我要看temp的单位属性
           ncl 8> print(temp@units)
           (0)     C
就告诉你单位是度,常用的变量属性有units,_FillValue,missing_value,long_name
!表示变量的维的名称,例如变量temp第一维的名称
           ncl 7> print(temp!0)
           (0)     time
   第一维的名称是time
& 表示变两维的数值,例如变量temp第二维的数值
ncl 9> print(temp&lev)
Variable: lev (coordinate)
Type: float
Total Size: 128 bytes
            32 values
Number of Dimensions: 1
Dimensions and sizes:   [lev | 32]
Coordinates:
Number Of Attributes: 2
  long_name :   ocean depth
  units :       meters
(0)     -5500
(1)     -5000
(2)     -4500
(3)     -4000
(4)     -3500
(5)     -3000
(6)     -2500
(7)     -2000
(8)     -1800
(9)     -1600
(10)    -1400
(11)    -1200
(12)    -1000
(13)    -900
(14)    -800
(15)    -700
(16)    -600
(17)    -500
(18)    -450
(19)    -400
(20)    -350
(21)    -300
(22)    -250
(23)    -200
(24)    -175
(25)    -150
(26)    -125
(27)    -100
(28)    -80
(29)    -60
(30)    -40
(31)    -20
一般要察看一个为数不大的维的信息,我们就可以print(var&dimname),这样维的信息基本上就都显示出来了
3.用NCL输出nc文件
[这个贴子最后由first在 2007/04/15 08:01pm 编辑]

用ncl输出nc文件很简单,主要是建立空白文件、计算变量、给变量附加属性、输出到文件中。
1.要建立一个空白的文件:
out=addfile("dataname.nc","c")   ; 这里的c就是create的意思,在创建文件是要保证文件不存在,否则系统会提示错误,所以一般会在这句话前加上 system("rm -f dataname.nc")
2.要准备好要输出的变量,例如我要输出变量u(time,lev,lat,lon)
3.给变量附属性:
  u!0="time"
  u&time=ispan(1,360,1)   ; 这里是创建一个时间序列1,2,3……360
  u!1="lev"
  u&lev=f->var&lev        ; 输出变量u的高度层和文件中var的高度层是一样的
  u!2="lat"
  u&lat=lat
  u!3="lon"                ; 这里的lat必须是已经知道的一个数组
  u&lon=lon
  u@long_name="zonal wind component"
  u@units="m/s"
4.输出变量
  out->U=u
这样就完成文件的创建了。通过读如旧文件,输出新文件可以修改变量的属性(时间轴、单位等)。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

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

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

返回顶部