NCL入门

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

NCL入门蔡宏珂2020年1月23日提纲•概述•语法基础•文件读写•函数过程•图形绘制NCL简介•专为(大气)科学•数据分析和可视化•程序设计语言NCL优势和缺点•足够便捷–较低的学习成本–简练的文件和图形接口–良好的文档和示例•足够强大–丰富而有针对性的函数库–漂亮而易操作的可视化结果•缺点–解释性语言,运行效率较低–没有原生内置的调试程序–只支持ANSI,不支持UnicodenetCDF-3、netCDF-4classic、netCDF-4、HDF4、二进制、ASCII文本HDF-EOS2、HDF-EOS5、GRIB1、GRIB2、OGR图例展示图例展示图例展示图例展示图例展示图例展示图例展示图例展示预备知识•了解基本的计算机知识–数制的转换和计算–数据的表示和存储•掌握基本的Linux系统操作•了解必要的数值计算方法•掌握常用的统计分析方法学习方法•计算机的基础工具性质决定:要掌握程序设计,不能全凭讲解,也不能单靠对知识术语的记诵,非依靠“多看多练”不可––读书是学习,使用也是学习,而且是更重要的学习•计算机语言是一种工具,仅仅学习语言规则还远远不够,最重要的是学会针对各种类型的问题而拟订出有效的解题方法和步骤——算法安装和配置①解压或复制②设置环境变量~/.bashrcexportNCARG_ROOT=/opt/NCL/exportPATH=$NCARG_ROOT/bin:$PATH③配置编辑器语法高亮、代码提示、源码控制、FTP/SFTP集成运行•命令行交互•脚本ncl[选项][参数]Script.ncl语法基础•数组•运算符•流程控制思考:物理量的描述•物理量的描述要同时用数字和单位来描述,否则不能产生任何物理意义0有意义吗?1有意义吗?2有意义吗?P=1000?hPa,~200mPa,~31km数组——数据模型•数据:相同类型元素构成的有限有序集•说明:包括但不限于物理意义•数据模型:基于NetCDF,自描述数据说明NCL数组数组——变量命名•变量定义必须以字母开头,允许字母、数字和下划线•避开保留字和内置、自定义函数/过程•大小写敏感数组——数据类型有符号数无符号数非数值型double64stringint6464uint6464characterfloat32graphiclong32ulong32fileinteger32uint32logicalshort16ushort16listbyte8char•数值类型转换:隐式转换以不丢失信息为原则,否则会产生致命错误;若必须丢失信息,则使用显示转换。•科学计数法:单精度float型采用e或E,双精度double型采用d或D•根据数据自动安排类型,integer/float判断小数点数组——数据集•(//)–静态数组,一经定义,不能改变类型和尺寸–声明、定义、初始化:三合一•无须声明,第一次赋值就是定义•也可以通过new定义并声明类型•不强制要求在语句块开头•初始化默认赋填充值–存储顺序以右侧优先,与C相似integer不能变成float,4*5不能变成5*4,尽管占用的空间相同不支持变长数组,不能给已有数组增减元素3*4数组(0,0)(0,1)(0,2)(0,3)(1,0)(1,1)(1,2)(1,3)(2,0)(2,1)(2,2)(2,3)数组——自描述说明:属性attribute•@–特殊变量,对数据类型、尺寸等无限制,但一经定义即不可改变–@_FillValue•填充值,多见于缺测或无效数据–@long_name•名称,多用于指明物理量–@units•单位,NCL在计算或绘图时可能会根据单位进行相应处理,经度degrees_east,纬度degrees_north,高度km或气压坐标hPa,时间hourssince1990-1-1–@add_offset•偏移量–@scale_factor•缩放倍率示例•T:short•T@long_name=“Temperature”•T@units=“K”•T@_FillValue=-99•T@scale_factor=0.01•T@add_offset=-70•T@source=“ObservedinRenmingParkStation”数组——属性的应用:偏移量和缩放倍率•@add_offset,偏移量,负数以正数形式存储•@scale_factor,缩放倍率,浮点数以整数形式存储•实际值=存储值*@scale_factor+@add_offset温度℃,通常为-70~60之间的两位小数存储值=(实际值+70)*100,变成0~13000之间的整数4字节float变成2字节short型,节省文件存储空间和网络传输成本@scale_factor=0.01@add_offset=-70读取时,将存储值乘以0.01,再减去70即可NCL提供了现成方法以方便处理数组——自描述说明:维度dimension及其物理意义•命名维度!–给维度起名•维度坐标&–给维度定位–以一个一维数组A作为另一个数组B(通常是多维数组)其中一个维度的坐标/索引–A数组也可有其自身的属性•命名维度和维度坐标的区别–命名维度是名字,字符串,不依赖于坐标维度–维度坐标是数据,数值,定义和引用均依赖于命名维度T!0=“Time”T!1=“Lat”T!2=“Lon”T!3=“Lev”T&Lat=(/-90,-80,-70,…,80,90/)a=(/-180,-170,…,170,180/)a@long_name=“Longitude”a@units=“degrees_east”T&Lon=a数组——索引序号索引43210维度索引90450-45-90维度索引-180-90090180序号索引01234数组——引用•序号索引–根据数据存储顺序–正整数–起始索引(0):结束索引(N-1):可选步长(1)•维度索引–根据维度坐标–整数和浮点数都可以,正负都可以–一般具有物理意义,理解和使用更便捷•序号索引和维度索引的形式上的区别:{}数组——变形•改变维度顺序–借助命名维度,符号|•缩减维度•array(k,...)自动省略单一维度,其它维度按顺序保留•array(k:k,...)强制保留单一维度T2=T(Lat|:,{Lon|70:140},{Lev|200:10},Time|0:5)数组——显示结果•print•printMinMax•printVarSummary•write_matrixprocedurewrite_matrix(data[*][*]:numeric,fmtf:string,option:logical)数组——练习•思考:维度调整和截选范围如何同时进行?–T(Time,Lat,Lon,Lev)调整成高度、纬度、经度、时间顺序,并截取青藏高原数据Result=T(Lev|:,{Lat|26:40},{Lon|73:105},Time|:)语法符号;开始注释:用于数组索引@创建/引用属性|用于命名维度分隔符!创建/引用命名维度\续行号(行尾)&创建/引用坐标变量::用于调用外部代码分隔符{...}用于坐标带下标-用于输入输出支持的数据格式$通过内置函数addfile输入输出变量时封装字符串[...]类型列表下标变量(/.../)创建数组,只包含值,不包含属性、命名维度等代数和逻辑运算符+加法/字符串连接%模(整数运算)-减法#矩阵乘法*乘法和大于/小于^乘方.lt.小于.le.小于等于.gt.大于.ge.大于等于.ne.不等于.eq.等于.and.与.or.或.xor.异或.not.非流程控制——顺序结构•自上而下按部就班地运行•没有行结束符,一条语句就是一行,换行必须在行尾使用续行符\begin语句体end流程控制——选择结构•只有二叉分支,没有elseif语句和switch/case结构等多叉分支•逻辑判断从左至右执行,因此将最可能的“假”放在左边if(标量逻辑表达式)then语句体else语句体endif流程控制——循环结构•break退出循环•continue跳过本次循环•同其它解释性语言一样,NCL循环效率低下,尽量使用数组或内置函数替代•如果必须使用多层循环,可以调用外部C或FORTRAN替代don=start,end(,step)循环体enddodowhile(标量逻辑表达式)循环体enddo文件读写•文件格式简介•二进制文件•ASCII文本文件•netCDF/HDF自描述文件文件格式简介•二进制文件–.dat、.bin•ASCII文本文件–.txt、.csv;•NetCDF(r、w、c)–.nc、.cdf、.netcdf•GRIB1和GRIB2(r)–.gr、.gr1、.grb、.grib、.grb1、.grib1、.gr2、grb2、.grib2•HDF(r、w、c),只支持ScientificDataSet–.hdf、.hd•HDFEOS(r)–.hdfeos、he2、he4•Shapefile(r)–.shp二进制文件•获取无格式顺序数据数量fbinnumrec•读取无格式顺序文件fbinrecread、fbinread•读取直接存取文件fbindirread•写无格式顺序文件fbinrecwrite、fbinwrite•写直接存取文件fbindirwrite•craybinnumrec、craybinrecread、cbinread、cbinwrite二进制文件——NCLvs.FORTRANeg:1~10的整型数据存放在无格式直接存储文件中data=fbindirread(“demo.bin”,-1,(/10/),integer)INTEGER*10::iOPEN(31,file=“demo.bin,access=sequential,form=unformatted)READ(31)iCLOSE(31)functionfbindirread(path[1]:string,文件路径rec_num[1]:integer,起始记录号rec_dims[*]:integer,数组维度rec_type[1]:string数据类型)return_val[rec_dims]:rec_type二进制文件——GrADS→NCL•Grads控制文件365天日降水量DSETdemo.binUNDEF-999.0TITLEGPCP1DegreeDaily(1DD)PrecipAnalysis(Version1)OPTIONSlittle_endianXDEF360LINEAR0.51.0YDEF180LINEAR-89.51.0ZDEF01LEVELS12TDEF365LINEAR1JAN19991dyVARS1rain199ch01GPCP1DDPrecip(mm/day)ENDVARS二进制文件——GrADS→NCL•NCL代码nlat=180nlon=360ntim=365setfileoption(bin,ReadByteOrder,LittleEndian)x=fbindirread(demo.bin,0,(/ntim,nlat,nlon/),float)x!0=timex!1=latx!2=lonx&time=timex&lat=latGlobeFo(nlat,lat,latitude,degrees_north)x&lon=lonGlobeFo(nlon,lon,longitude,degrees_east)x@long_name=GPCP1DDPrecipx@units=mm/dayproceduresetfileoption(format_or_file[1]:stringorfile,文件格式或文件句柄option[1]:string,属性名value属性值)ASCII文本文件•读ASCII文件asciiread以及readAsciiHeader和r

1 / 108
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功