ncl操作手册.ppt
《ncl操作手册.ppt》由会员分享,可在线阅读,更多相关《ncl操作手册.ppt(66页珍藏版)》请在三一文库上搜索。
1、NCAR Command Language (NCL),一、简介,1.1 正确安装NCL,windows下的安装可以参考如下地址。 http:/ 1.2 运行方式 ncl 文件名.ncl NCL的函数可以通过以下方式连接 load “myfoo.ncl”,二、语法,2.1 符号 ; 后面用以添加注释 创建或引用“属性” ! 创建或引用“命名的维” & 创建或引用“坐标变量” 表示坐标的下标 $ 用与封装字符串,当需要输入输出通过“addfile”引用 文件的变量时。 (/) 构造数组 : 用于选择截取的数组的范围 | 用作“命名的维(named dimensions)” 的分隔符。 放在句尾,
2、说明下一行和本行是同一个 语句。 : 用做调用外部代码时的分隔符。 - 用于向外部文件输入输出数据时指定外部文件中的变量。,2.2 数据类型 数值型:double(64位)、float(32位)、long(32或 64位),integer(32位),short(16位)、byte(8位)。 非数值型:string、character、graphic、file、 logical、list。 2.3 运算符 代数运算符 + 加 - 减 * 乘 指数 % 取余 # 矩阵相乘 , 大于,小于,逻辑运算符 .lt. 小于 .le. 小于等于 .gt. 大于 .ne. 不等于 .eq. 等于 .and.
3、并且 .or. 或者 .xor. 异或 .not. 非,2.4 循环 do n=start,end,optional_stride 语句。 end do 或者 do while(逻辑表达式) 语句。 end do Break:跳出循环 Continue:直接进入下次循环,2.5 声明语句 在代码的开始和结尾要添加“begin”和“end”。 If语句 If(逻辑表达式) then 语句 end if 另: If(逻辑表达式) then 语句 else 语句 end if,2.6 坐标变量 变量除了有指定值,还可以有附属的信息叫元数据,有三种元数据,分别为coordinate variables
4、(坐标变量)、named dimensions、attributes(属性)。 坐标必须是单调递增的或递减的一维数组。坐标变量的名称必须 和对应维的名称相同。&运算符用来引用和分配坐标变量。 例: T!0 = “lat“ T!1 = “lon“ T&lat = (/-90.,-85.,.,85.,90./) T&lon = fspan(0.,355.,72) “iscoord”可以检测一个给定的string是否是这个变量的坐标变量。,2.7维数和下标 在NCL中数组的下标有两种:”标准下标”和”坐标下标”。 下标值的范围为”0”到”n-1”。 “标准下标”有以下的格式 开始值:结束值:步进值(
5、可选项) 若不写开始值默认为”0”,若不写结束值默认为”n-1”,步进值默认为1。 例如:T(:1,45,10,20) ;T为三维数组(time,lat,lon),则T(:1,45,10,20) 代表开始的两个时间坐标,第46个lat,和11-21个lon坐标,为一个(2X1X11)维数组。 “坐标下标” 例子: pressure!0 = “lat“ pressure!1 = “lon“,lat_points = (/-80, -60, -40, -20, 0, 20, 40, 60, 80/) lon_points = (/-180, -120, -60, 0, 60, 120, 180/)
6、 pressure&lat = lat_points pressure&lon = lon_points 调用: Pressure(-40:40:-180:120) 选择的是lat为(-40到40),lon为(-180到120)的坐标对应的pressure值组成的数组。表明你用的是”坐标下标”。,2.8 named dimensions 可以为数组的各个维赋予名字,格式如下 pressure!0 = “time“ pressure!1 = “latitude“ pressure!2 = “longitude“ 分别为pressure的1,2,3维起名字“time“, “latitude“, “
7、longitude“. “isdim”可以检测给定的一个string是否是这个变量的一个维的名字。 命名的维只有在对维进行重排序时会用到: reordered_pressure = pressure(longitude|:,latitude|:,time|:) 上面将”time”和”longitude”的位置进行了交换。 “isdim”可以检测给定的一个string是否是这个变量的一个维的名字。,2.9 属性 Attributes:变量的”属性”就是变量的信息。变量的属性用” “符 号创建和调用。属性只能为已存在的变量创建。 例: xmin = -50 xmax = 50.0d ;d表示dou
8、ble型数值 xunits=“meters“ xlong_time=“A variable for temporary storage“,2.10 _FillValue 在NCL或一个netCDF文件中,属性_FillValue代表缺失值。 如果你的数据有”missing_value”属性而没有”_FillValue”属性,你可以这样做: X_FillValue = Xmissing_value 2.11 变量和元数据 如果y不存在,y=x会将x完整的复制给y(包括x的元数据),如果y已经定义了,则x必须和y是同一类型的(或者可以强制转换)。 y=(/x/)表示只将x的值赋给y,不包括x的元数
9、据。,三、NCL文件输入/输出,3.1 支持的格式 netCDF3/4, HDF4 (Scientific Data Set only), HDF4-EOS, GRIB-1, GRIB-2 and CCM 创建文件引用,用”addfile”方法。 f = addfile (文件名, status) Statue包括”r”读,适用所有NCL支持的格式,”c”创建,仅适用与netCDF和HDF4格式,”w”读/写,仅适用与netCDF和HDF4格式. 例子: f = addfile(“foo.nc“, “r“) grb = addfile(“/my/grib/foo.grb“, “r“) hdf
10、= addfile(“/your/hdf/foo.hdf“,“c“) h = addfile(“foo.hdfeos“, “r“) ccm = addfile(“foo.ccm“, “r“),如果X是f引用的文件中的变量,则 y=f-X 表示将X赋予y,包括其元数据。 在下面的两种情况下,变量名两端必须加”$”符号, 1、文件中的变量名含有非字母数字的符号(例如:空格,”+”或”-”). 2、在-右边的那一项是表示一个变量的变量。 输出 “print”命令可以输出所有NCL支持格式的数据。 例如:x=1 print(x) “ncl_filedump”命令可以查看GRIB和netCDF文件的详细
11、信息。 将short和byte转换为float类型的函数有 x=short2flt(f-X) x=byte2flt(f-X) 以上函数使用时需要加载“contributed.ncl”, load “$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl“,读取多个文件 “addfiles”用来从多个文件获得数据。 例: fils = systemfunc(“ls ann*.nc“) f = addfiles(fils,“r“) T = f:-T 在结果T中包含了多个文件的数据。 “systemfunc(“ls ann*.nc”)”命令表示得到所
12、有以ann为开头的netCDF文件。 3.2 二进制数据文件 IEEE二进制数据有两种不同的格式:big endian(高位在前)和little endian(低位在前).NCL允许通过”setfileoption”函数进行动态的转换。,读二进制数据 fbinrecread(path:string,recnum:integer,dims*:integer,type:string) 用来读取Fortran unformatted sequential文件 fbindirread(path:string,rnum:integer,dims*:integer,type:string) 用来读取固定纪
13、录长度的二进制数据 其它读取二进制文件的函数有cbinread, fbinread和craybinrecread 写二进制数据 fbinrecwrite(path:string,recnum:integer,value)用来写Fortran unformatted sequential文件 例: 假设你有下面五个变量,time,lat,lon,y,z. recnum为-1表示value放在文件尾,不为零则作为文件的记录号。 fbinrecwrite(“f.ieee“,-1, time) fbinrecwrite(“f.ieee“,0, lat) fbinrecwrite(“f.ieee“,1,
14、 lon) fbinrecwrite(“f.ieee“,2, y) fbinrecwrite(“f.ieee“,3, z),其它写IEEE二进制文件的方法有fbindirwrite、cbinwrite和fbinwrite. 3.3 ASCII 读ASCII文件 asciiread(filepath:string,dims*:integer,datatype:string) 复杂的ASCII文件应该用C语言或Fortran来读取。 例: z = asciiread(“data.asc“,(/100,13/),“float“ 写ASCII文件 asciiwrite(filepath:string,
15、value) 只能写一列且没有格式控制。 例:asciiwrite(“foo.ascii“,x) write_matrix(data*:numeric,fmtf:string,option)可以写多列,并且可以控制格式。 例:fmtf =“15f7.2” ; fortran字符格式字符串 opt = True optfout = “foo.ascii“ write_matrix(x,fmtf,opt),3.4 写netCDF/HDF文件 有两种方法来创建netCDF/HDF文件,一种为”简单方法”,一种为”传统途径”:在写入任何值之前需要明确的定义文件的内容。 简单方法 fo = addfil
16、e(“foo.nc”,”c”) 要想创建一个没有上限的维(一般是时间),必须在写入值之前添加如下代码 filedimdef(fo,“time“,-1,True) 传统途径 NCL预定义netCDF文件 filevardef:为一个或多个变量定义名字 filevarattdef:从一个变量复制属性到一个或多个文件变量 filedimdef:定义维数,包括无限制维 fileattdef:从一个变量复制属性到一个文件作全局变量 setfileoption:一些选项可以提高性能,例:假设变量time、lat、lon、T在内存中。当写入到netCDF 文件中时,T被命名为TMP。 fout = addf
17、ile(“out.nc“,“c“) ; 创建一个全局变量 fileAtt = True fileAtttitle = “Sample“ fileAttConventions = “None“ fileAttcreation_date = systemfunc(“date“) setfileoption(fout,“DefineMode”,True) ; optional fileattdef(fout,fileAtt) ; 预定义坐标变量 dimNames = (/“time“,“lat“,“lon“/) dimSizes = (/-1,nlat,nlon/) ; -1 means unspe
18、cified dimUnlim = (/True,False,False/),; 预定义名字、类型、维数 ; 确切的维名字或用”getvardims” filedimdef(fout,dimNames,dimSizes,dimUnlim) filevardef(fout,“time“,typeof(time),getvardims(time) filevardef(fout,“lat“ ,typeof(lat) ,“lat“) filevardef(fout,“lon“ ,“float“ ,“lon“) filevardef(fout,“TMP“ ,typeof(T) , getvardims
19、(T) ) ; 预定义每个变量的属性 filevarattdef(fout,“time“,time) filevarattdef(fout,“lat“ ,lat) filevarattdef(fout,“lon“ ,lon) filevarattdef(fout,“TMP“ ,T) setfileoption(fout,”SuppressDefineMode”,False) ; optional ; 仅输出数值可用 (/ /) 过滤掉元数据 fout-time = (/time/) fout-lat = (/lat/) fout-lon = (/lon/) fout-TMP = (/T/) ;
20、 T in script; TMP on file,向netCDF中写入标量 简单方法 fo = addfile(“simple.nc“,“c“) con = 5 con!0 = “ncl_scalar“ fo-constant = con 传统方法 re = 6.37122e06 relong_name = “radius of earth“ reunits = “m“ fout = addfile(“traditional.nc“, “c“) filevardef(fout,“re“,typeof(re),“ncl_scalar“) filevarattdef(fout,“re“,re)
21、fout-re = (/re/) ncl_convert2nc可以将任何支持的格式转换为netCDF格式,四、输出到窗口,有效的printing函数有: printVarSummary:输出变量的概述(包括元数据) print:和printVarSummary相同,输出每个元素的值 sprinti,sprintf:提供许多格式控制 write_matrix:以格表格式输出数据,例:printVarSummary 输入:printVarSummary(u) 结果: Variable: u Type: double Total Size: bytes 147456 values Number of
22、 Dimensions: 4 Dimensions / Sizes: time | 1 x lev | 18 x lat | 64 x lon | 128 Coordinates: time: 40464046 lev: 4.809 992.5282 lat: -87.86379 87.86379 lon: 0. 0 357.1875 Number of Attributes: 2 long_name: zonal wind component units: m/s,例:print 输入:print(u) 结果: (0,0,0,0) 31.7 (0,0,0,1) 31.4 (0,0,0,2)
23、32.3 例:sprintf, sprinti min(u)= -53.8125 print(“min(u)=“+sprintf(“%5.2f“,min(u) 结果:min(u) = -53.81 ii=(/-47,3579,24680/) print(sprinti(“%+7.5i“,ii) 结果:-00047, +03579, +24680,例:write_matrix 输入:write_matrix(T,“5f7.2”,False) ;T为3行5列的数组 结果: 4.36 4.66 3.77 -1.66 4.06 9.73 -5.84 0.89 8.46 10.39 4.91 4.59
24、-3.09 7.55 4.56 “5f7.2”表示生成5列,没个元素以f7.2的格式输出,可以通过将第三个元素设置为True为输出添加额外的内容。 如: opt = True opttitle = “Normal“ write_matrix (T, “5f7.2“ , opt) 更多信息请查看官网提供的函数列表。,五、数据分析,NCL提供了多种分析数据的方法 1、通过数组的处理来分析数据 2、NCL提供了内置的几百个函数 3、许多用户贡献的函数 4、调用Fortran或C语言函数 5.1、通过数组分析 对于大多数运算符,它的操作数必须具有相同的维数,且每一维的大小应该是相同的。 另外,操作数的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ncl 操作手册
链接地址:https://www.31doc.com/p-2893633.html