您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > NCL中文使用说明ppt
NCARCommandLanguage(NCL)一、简介•1.1正确安装NCL,windows下的安装可以参考如下地址。–•1.2运行方式–ncl文件名.ncl–NCL的函数可以通过以下方式连接•load“myfoo.ncl”二、语法•2.1符号–;后面用以添加注释–@创建或引用“属性”–!创建或引用“命名的维”–&创建或引用“坐标变量”–{…}表示坐标的下标–$用与封装字符串,当需要输入输出通过“addfile”引用文件的变量时。–(/…/)构造数组–:用于选择截取的数组的范围–|用作“命名的维(nameddimensions)”的分隔符。–\放在句尾,说明下一行和本行是同一个语句。–::用做调用外部代码时的分隔符。–-用于向外部文件输入输出数据时指定外部文件中的变量。•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.并且.or.或者.xor.异或.not.非•2.4循环•don=start,end,optional_stride语句。。。enddo或者dowhile(逻辑表达式)语句。。。enddo•Break:跳出循环•Continue:直接进入下次循环•2.5声明语句–在代码的开始和结尾要添加“begin”和“end”。–If语句If(逻辑表达式)then语句endif另:If(逻辑表达式)then语句else语句endif•2.6坐标变量•变量除了有指定值,还可以有附属的信息叫元数据,有三种元数据,分别为coordinatevariables(坐标变量)、nameddimensions、attributes(属性)。坐标必须是单调递增的或递减的一维数组。坐标变量的名称必须和对应维的名称相同。&运算符用来引用和分配坐标变量。例:T!0=latT!1=lonT&lat=(/-90.,-85.,...,85.,90./)T&lon=fspan(0.,355.,72)“iscoord”可以检测一个给定的string是否是这个变量的坐标变量。•2.7维数和下标•在NCL中数组的下标有两种:”标准下标”和”坐标下标”。•下标值的范围为”0”到”n-1”。•“标准下标”有以下的格式–开始值:结束值:步进值(可选项)»若不写开始值默认为”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=latpressure!1=lonlat_points=(/-80,-60,-40,-20,0,20,40,60,80/)lon_points=(/-180,-120,-60,0,60,120,180/)pressure&lat=lat_pointspressure&lon=lon_points调用:Pressure({-40:40}:{-180:120})选择的是lat为(-40到40),lon为(-180到120)的坐标对应的pressure值组成的数组。{}表明你用的是”坐标下标”。•2.8nameddimensions可以为数组的各个维赋予名字,格式如下pressure!0=timepressure!1=latitudepressure!2=longitude分别为pressure的1,2,3维起名字time,latitude,longitude.“isdim”可以检测给定的一个string是否是这个变量的一个维的名字。命名的维只有在对维进行重排序时会用到:reordered_pressure=pressure(longitude|:,latitude|:,time|:)上面将”time”和”longitude”的位置进行了交换。“isdim”可以检测给定的一个string是否是这个变量的一个维的名字。•2.9属性Attributes:变量的”属性”就是变量的信息。变量的属性用”@“符号创建和调用。属性只能为已存在的变量创建。例:x@min=-50x@max=50.0d;d表示double型数值x@units=metersx@long_time=Avariablefortemporarystorage•2.10_FillValue•在NCL或一个netCDF文件中,属性_FillValue代表缺失值。•如果你的数据有”missing_value”属性而没有”_FillValue”属性,你可以这样做:•X@_FillValue=X@missing_value•2.11变量和元数据•如果y不存在,y=x会将x完整的复制给y(包括x的元数据),如果y已经定义了,则x必须和y是同一类型的(或者可以强制转换)。•y=(/x/)表示只将x的值赋给y,不包括x的元数据。三、NCL文件输入/输出•3.1支持的格式netCDF3/4,HDF4(ScientificDataSetonly),HDF4-EOS,GRIB-1,GRIB-2andCCM–创建文件引用,用”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=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=1print(x)–“ncl_filedump”命令可以查看GRIB和netCDF文件的详细信息。–将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(lsann*.nc)f=addfiles(fils,r)T=f[:]-T–在结果T中包含了多个文件的数据。–“systemfunc(“lsann*.nc”)”命令表示得到所有以ann为开头的netCDF文件。•3.2二进制数据文件–IEEE二进制数据有两种不同的格式:bigendian(高位在前)和littleendian(低位在前).NCL允许通过”setfileoption”函数进行动态的转换。•读二进制数据fbinrecread(path:string,recnum:integer,dims[*]:integer,type:string)用来读取Fortranunformattedsequential文件fbindirread(path:string,rnum:integer,dims[*]:integer,type:string)用来读取固定纪录长度的二进制数据其它读取二进制文件的函数有cbinread,fbinread和craybinrecread•写二进制数据–fbinrecwrite(path:string,recnum:integer,value)用来写Fortranunformattedsequential文件–例:»假设你有下面五个变量,time,lat,lon,y,z.recnum为-1表示value放在文件尾,不为零则作为文件的记录号。fbinrecwrite(f.ieee,-1,time)fbinrecwrite(f.ieee,0,lat)fbinrecwrite(f.ieee,1,lon)fbinrecwrite(f.ieee,2,y)fbinrecwrite(f.ieee,3,z)–其它写IEEE二进制文件的方法有fbindirwrite、cbinwrite和fbinwrite.•3.3ASCII•读ASCII文件–asciiread(filepath:string,dims[*]:integer,datatype:string)–复杂的ASCII文件应该用C语言或Fortran来读取。–例:»z=asciiread(data.asc,(/100,13/),float“•写ASCII文件–asciiwrite(filepath:string,value)只能写一列且没有格式控制。–例:asciiwrite(foo.ascii,x)–write_matrix(data[*][*]:numeric,fmtf:string,option)可以写多列,并且可以控制格式。–例:fmtf=“15f7.2”;fortran字符格式字符串opt=Trueopt@fout=foo.asciiwrite_matrix(x,fmtf,opt)•3.4写netCDF/HDF文件•有两种方法来创建netCDF/HDF文件,一种为”简单方法”,一种为”传统途径”:在写入任何值之前需要明确的定义文件的内容。•简单方法–fo=addfile(“foo.nc”,”c”)–要想创建一个没有上限的维(一般是时间),必须在写入值之前添加如下代码»filedimdef(fo,time,-1,True)•传统途径–NCL预定义netCDF文件»filevardef:为一个或多个变量定义名字»filevarattdef:从一个变量复制属性到一个或多个文件变量»filedimdef:定义维数,包括无限制维»fileattdef:从一个变量复制属性到一个文件作全局变量»setfileoption:一些选项可以提高性能–例:假设变量time、lat、lon、T在内存中。当写入到netCDF文件中时,T被命名为TMP。fout=addfile(out.nc,c);创建一个全局变量fileAtt=TruefileAtt@title=SamplefileAtt@Conventions=NonefileAtt@creation_date=systemfunc(date)setfileoption(fout,“DefineMode”,True);optionalfileattdef(fout,fileAtt);预定义坐标变量dimNames=(/time,lat,lon/)dimSizes=(/-1,nlat,nlon/);-1meansunspecifieddimUnlim=(/True,False,False/);预定义名字、类型、维数;确切的维名字或用”getvardims”filedimdef(fout,dimNames,dimSizes,dimUnlim)filevardef(fout,time,typeof(time),getvardims(time))filevardef(fout,lat,typ
本文标题:NCL中文使用说明ppt
链接地址:https://www.777doc.com/doc-6741886 .html