Top Banner
NCL Introducti on Dennis Shea National Center for Atmospheric Research
50

NCL Introduction Dennis Shea National Center for Atmospheric Research.

Jan 12, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: NCL Introduction Dennis Shea National Center for Atmospheric Research.

NCL

Introduction

Dennis Shea

National Center forAtmospheric Research

Page 2: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Workshop Overview

Labs important: you must invest the time “osmosis” method of learning does not work

Schedule day 1:

Intro/Language Basics, File I/O, Graphics: Lab day 2:

Data Processing [two sessions]: Lab day 3 / optional day 4 [8-12]

Lab

Objective comfortable with NCL; minimize learning curve

workshop will not make you an expert access, process and visualize data

Page 3: NCL Introduction Dennis Shea National Center for Atmospheric Research.

scalar

2D array

X(8)

Y(8)

x(8), y(8)Q(8,8)Q(y,x)

3D array

Z(4)

x(8), y(8), z(4)R(4,8,8)R(z,y,x)

Size = 31D array(vector)Time

time (3)time(time)

Time

x(8), y(8), z(4), t(3) S(3,4,8,8) (time,z,y,x)

4D array

Page 4: NCL Introduction Dennis Shea National Center for Atmospheric Research.

NCL variable based on a netCDF variable model

Page 5: NCL Introduction Dennis Shea National Center for Atmospheric Research.

netCDF filesself describing

(ideally) all info contained within file no external information needed to determine file

contentsportable [machine independent]

Many modelling groups use netCDF

Supported by many software tools / languages NCL, IDL, Matlab, ferret, GrADS,... / F, C, C++, Java,… NCO: netCDF Operators

perform various tasks very efficiently http://nco.sourceforge.net

ncview quick visualization: COARDS

http://meteora.ucsd.edu/~pierce/ncview_home_page.html

Page 6: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Examining a netCDF file• ncdump file_name | less

dumps the entire contents of a file• ncdump -h file_name | less

dumps the header info [most commonly used] NCL equivalent: ncl_filedump file_name | less

• ncdump -v U file_name | less NCL equivalent: ncl_filedump –v U file_name | less

• Note: ncdump is a Unidata utility not a netCDF Operator (NCO) not associated with NCL

• ncl_filedump file_name [ more general ] netCDF, GRIB, HDF, HDF-EOS

• ncview to visualize file contents [COARDS]

Page 7: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Parts of netCDF filencdump -h 1999.nc

DIMENSIONS:dimensions: lat = 64 ; lon = 128 ; time = 12 ;

VARIABLES: Names , Attributes, Coordinatesvariables: float lat(lat) ; lat:long_name = "latitude" ; lat:units = "degrees_north" ; float lon(lon) ; lon:long_name = "longitude" ; lon:units = "degrees_east" ; int time(time) ; time:long_name = "time" ; time:units = "Month of Year" ; double T(time, lat, lon) ; T:long_name = “Temperature”; T:units = “C" ; T:missing_value = 1.e+20f ; T:_FillValue = 1.e+20f

FILE ATTRIBUTES:global attributes: :title = “Temp: 1999" ; :source = “NCAR” ; :conventions = "None" ;

exercise: ncl_filedump –h UV300.nc | less

Page 8: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Simple Array [fortran]• array [regular shape; could be of length 1 (scalar)]

name: xtype: real (float)shape: 2-dimensions [ 2D ]size: 7 (rows) x 5 (columns)values: x(3,4) = 8.46 [col major]

4.35 4.39 0.27 -3.35 -6.90 4.36 4.66 3.77 -1.66 4.06 9.73 -5.84 0.89 8.46 10.39 4.91 4.59 -3.09 7.55 4.56

.17 3.68 5.08 0.14 -5.63 -0.63 -4.12 -2.51 1.76 -1.43 -4.29 0.07 5.85 0.87 8.65

x

parameter (nrow=7, ncol=5)

real x(nrow,ncol)

Page 9: NCL Introduction Dennis Shea National Center for Atmospheric Research.

netCDF/NCL variable

long_name: “Temperature”units: “C”named dimensions: x(time,lat)lat: (/ -60, -30 ,0, 30, 60 /)time: (/2000,2001,2002,2003,2004,2005,2006 /)

4.35 4.39 0.27 -3.35 -6.90 4.36 4.66 3.77 -1.66 4.06 9.73 -5.84 0.89 8.46 10.39 4.91 4.59 -3.09 7.55

4.56 .17 3.68 5.08 0.14 -5.63

-0.63 -4.12 -2.51 1.76 -1.43 -4.29 0.07 5.85 0.87 8.65

x

• array [could be of length 1 (scalar)]• (may) have additional information

name: xtype: float [real]shape: 2-dimensionssize: 7 (rows) x 5 (columns)values: x(2,3) = 8.46 [row major]

Page 10: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Longitude coordinate variable (1D, &)

Latitude coordinate variable (1D, &

)

attributes @:

• long_name

• units

visual: simple 2D netCDF Variable

coordinate variables

NCL is NOT LIMITED to netCDF conforming variables

• eg: 2D coordinate arrays (curvilinear coords)

Page 11: NCL Introduction Dennis Shea National Center for Atmospheric Research.

netCDF [NCL] Variable model

f = addfile(“foo.nc”,”r”) ; grb/hdfx = f->X

XScalar

or Array

attributeslong_name_FillValue

unitsadd_offset

scale_factoretc. values

Scalar or

Array

attributeslong_name_FillValue

unitsadd_offset

scale_factoretc.

accessed via @ accessed via &

timelevlatlonetc.

coordinates timelevlatlonetc.

coord var

NCL reads the scalar/array, attributes, and coordinate

variables as an object

X

Page 12: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Detailed Look netCDF Variable (NCL)ncl <return> ; interactive mode

ncl 0 > f = addfile ("UV300.nc", "r") ; open file

ncl 1 > u = f->U ; import STRUCTURE

ncl 2 > printVarSummary (u) ; overview of variable

Variable: uType: floatTotal Size: 65536 bytes 16384 valuesNumber of Dimensions: 3Dimensions and Sizes: [time | 2] x [lat | 64] x [lon | 128]Coordinates: time: [ 1 .. 7 ] lat: [ -87.8638 .. 87.8638 ] lon: [ 0 .. 357.185]Number of Attributes: 5 _FillValue : 1e36 units : m/s long_name : Zonal Wind Component short_name : U missing_value : 1e36

Classic netCDFVariable Model

NCL syntax/funcs query use modify add any aspect of data object

Page 13: NCL Introduction Dennis Shea National Center for Atmospheric Research.

UNLIMITED dimension • special dimension

essentially a “record” dimension time dimension is most frequently “unlimited” used by the NCO to concatenate files no special meaning to NCL

• when creating output file in NCL (optional) filedimdef (outputfile, “time”, -1, True )

• example: ncdump -h T2m_ud.nc

netcdf T2m_ud {dimensions: time = UNLIMITED ; // (204 currently) lat = 94 ; lon = 192 ; lev = 18}

Page 14: NCL Introduction Dennis Shea National Center for Atmospheric Research.

pdf

Vis5D

NCL Overview

• portable: Linux/Unix, Windows, MacOSX

• general purpose: unique capabilities

• excellent graphics

• freeware: supported, public domain

• Integrated processing environment

Page 15: NCL Introduction Dennis Shea National Center for Atmospheric Research.

NCL Support• Documentation and Examples

http://www.ncl.ucar.edu/ numerous downloadable examples to get you going

downloadable reference manuals [pdf], FAQ

[email protected]

users must subscribe

http://www.ncl.ucar.edu/Support/ncl_talk.shtml

[[email protected] , [email protected]]

Page 16: NCL Introduction Dennis Shea National Center for Atmospheric Research.

NCAR Command Language• Complete Programming Language

data types variables operators expressions conditional statements loops functions/procedures/graphics

• Features query / manipulate meta data import data in a variety of formats array syntax / operations can use user fortran/C codes and commercial libraries most functions/procedures ignore missing data

Page 17: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Running NCL• Interactive Mode (Command line)

ncl [options][command-line-arguments] <return> ncl> enter commands ncl> quit <return>

can save interactive commandsncl> record (“file_name”)ncl> stop record

• Batch Mode [ .ncl suffix is optional] ncl [options][arguments] script.ncl

ncl < script.ncl [also acceptable] ncl [options][arguments] script.ncl >&! out ncl [options][arguments] script.ncl >&! out &

appending "&" means put in background note: the >&! & are csh and tcsh syntax

Page 18: NCL Introduction Dennis Shea National Center for Atmospheric Research.

NCL predefined options• ncl –hnxV [predfined options are preceded by dash]• may be used for interactive or batch mode • informational

ncl –h [display predefined options and usage and exit] ncl –V [print the NCL version and exit]

• action ncl –x [echo statements as encountered (debug)] ncl –n [don't enumerate dimensions of values in print() ]

• multiple predefined options ncl –nx [ not ncl –n –x ]

Page 19: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Sample Batch Script: sample.ncl load “$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl“load “$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl“

f1 = addfile("TMP_58-97.nc", "r") ; open netCDF file T = f1->Tmp ; T(time,lev,lat,lon) =>(480,17,73,144) f2 = addfile(“P_1958-1997.grb", "r") ; open GRIB file P = f2->Pres ; P(time,lev,lat,lon) f3 = addfile(“Q_1958-1997.hdfeos", "r") ; open hdf –eos file

Q = f3->Specific_Humidity ; Q(time,lev,lat,lon)

wks = gsn_open_wks("ps", “sample") ; open a graphic workstation gsn_define_colormap (wks,"gui_default") ; change from default

plot = gsn_csm_contour_map_polar (wks,T(0,5,:,:),False) res = True ; change default plot res@cnFillOn = True ; use colors res@gsnSpreadColors = True ; use entire color map plot = gsn_csm_pres_hgt (wks,T(0,:,{50},:), res )

pot = T* (1.+0.622*Q) *(1000/P)^0.286 ; potential temperature (array)

print("pot: min="+ min(pot) + " max="+ max(pot) )

begin ; optional

end ; only if begin is present

Page 20: NCL Introduction Dennis Shea National Center for Atmospheric Research.
Page 21: NCL Introduction Dennis Shea National Center for Atmospheric Research.
Page 22: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Outline: Language Basics

• special syntax characters• data types• Variables netCDF/NCL variable model • attributes • _FillValue• named dimensions• coordinate variables• print and printVarSummary• shaping • subscripting

Page 23: NCL Introduction Dennis Shea National Center for Atmospheric Research.

NCL Syntax Characters• ; - comment [can appear anywhere]• @ - reference/create attributes• ! - reference/create named dimension• & - reference/create coordinate variable•{…} - coordinate subscripting• $ - enclose strings when (im/ex)port variables via addfile•(/../) - array construct characters• : - array syntax• | - separator for named dimensions• \ - continue character [statement to span multiple lines]• :: - syntax for external shared objects (eg, fortran/C)• -> - use to (im/ex)port variables via addfile function

Page 24: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Data Types

Numeric• double (64 bit)• float (32 bit)• long (32 or 64 bit)• integer (32 bit)• short (16 bit)• byte ( 8 bit, 0-255)• complex NOT supported

non-Numeric• string• character• graphic• file• logical• list

Page 25: NCL Introduction Dennis Shea National Center for Atmospheric Research.

netCDF/NCL variable

long_name: “Temperature”units: “C”named dimensions: x(time,lat)lat: (/ -60, -30 ,0, 30, 60 /)time: (/2000,2001,2002,2003,2004,2005,2006 /)

4.35 4.39 0.27 -3.35 -6.90 4.36 4.66 3.77 -1.66 4.06 9.73 -5.84 0.89 8.46 10.39 4.91 4.59 -3.09 7.55

4.56 .17 3.68 5.08 0.14 -5.63

-0.63 -4.12 -2.51 1.76 -1.43 -4.29 0.07 5.85 0.87 8.65

x

• array [could be of length 1 (scalar)]• (may) have additional information

name: xtype: float [real]shape: 2-dimensionssize: 7 (rows) x 5 (columns)values: x(2,3) = 8.46 [row major]

Meta data

Page 26: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Why Know NCL Variable Model variables imported (read) from nc, grib, hdf, hdf-eos

will have the same [consistent] structure powerful programming concept

facilitates writing netCDF and HDF files

facilitates writing robust functions functions can query, add, use meta data

some functions access/use the meta data

• eg: gsn_csm graphic functions aware of common netCDF conventions will query and use for labels and mapping

Page 27: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Simple Variable Assignmenta_int = 1 , a_float = 2.0 [2e-5] a_double = 3.2da_string = "a” , a_logical = True [False]

• array constructor characters (/…/) a_integer = (/1,2,3/) a_float = (/1.0, 2.0, 3.0/) a_double = (/1., 2 , 3.2 /) *1d5 a_string = (/"abcd","e", "Hello, World”/) a_logical = (/True, False,True/) a_2darray = (/ (/1,2,3/), (/4,5,6/), (/7,8,9/) /)

Page 28: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Conversion between data types

• coercion implicit conversion of one type to another

• automatic coercion when no info is lost fortran: x=i and i=x NCL: x=i and i=floattointeger(x)

• many functions to perform conversions

Page 29: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Attributes

• assign/access with @ character T@units = “deg C” T@wgts = (/ 0.25, 0.5, 0.25 /) T@x2d = (/ (/1,2,3/), (/4,5,6/), (/7,8,9/) /) T@_FillValue = -999 title = x@long_name

• attribute functions [isatt, getfilevaratts] if (isatt(T,"units")) then .... end if atts = getfilevaratts (fin, "T")

• delete can eliminate an attribute delete(T@title)

• info about a variable or file [meta data] attributes can be any data type but file or list scalar, multi dimensional array (string, numeric)

Page 30: NCL Introduction Dennis Shea National Center for Atmospheric Research.

_FillValue• Unidata and NCL reserved attribute • most NCL functions ignore _FillValue

• netCDF Operators [NCO] • look for “missing_value” attribute

best to create netCDF files with both

• NCL: best to not use zero as a _FillValue OK except when contouring [random bug]

• Note: “missing_value” attribute: no special status to NCL if “T” has “missing_value” attribute but no “_FillValue ”

T@_FillValue = T@missing_value use built-in function “ismissing” to check for _FillValue

if (any(ismissing(T))) then … end if NOTE: if (any(T.eq.T@_FillValue)) will not work

Page 31: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Interactive: Variable_1

http://www.ncl.ucar.edu/Training/Workshops/interactive.shtml

- demonstrate interactive mode illustrate simple calculations and function use first view of meta data [attributes]

Page 32: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Dimensions

• assigned with ! Character {let T(:,:,:)} T!0 = "time" ; leftmost [slowest varying] dim T!1 = "lat“ T!2 = "lon" ; rightmost [fastest varying] dim

• Dim names may be renamed, retrieved T!1 = "LAT" … dName = T!2

• delete can eliminate: delete (T!2)

• Named dimensions used to reshape

• may be “named”provides alternative way to reference subscriptsrecommendation: always name dimensionsuse NCL syntax

Page 33: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Coordinate Variables• data coordinates [ eg: time, level, lat, lon ]

strict netCDF definition 1D array monotonically in[de]creasing numeric values can only be assigned to a named dimension 1D array must be the same size as dimension should not have _FillValue or missing_value attributes

values assigned via & character T&lat = latitude

• used in graphics, coordinate subscripting

• coordinate functions iscoord , isfilevarcoord

• delete can eliminate coordinate arraydelete(T&time)

Page 34: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Create and Assign Coordinate Variables

• assign values to named dimension time&time = time lon&lon = lon

• let x be 2D: name dimensions x!0 = “time” … x!1 = “lon”

• assign coordinate variables to x x&time = time … x&lon = lon

• assign dimension name(s) time!0 = “time” lon!0 = “lon”

•create 1D array time = (/ 1980, 1981, 1982 /) ; integer lon = ispan(0, 355, 5)*1.0 ; integer->float

Page 35: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Access/Change/Create/Delete Meta Data• @ attributes

u@long_name = "U" lonName = u@long_name

• ! named dimensions u!0 = "TIME" tName = u!0

• & coordinate variable u&lat = (/ -90., -85, .... , 85., 90. /) latitude = u&lat

• $ substitute string x = fin->$variable(n)$ … x = fin->$”T: p”$

Page 36: NCL Introduction Dennis Shea National Center for Atmospheric Research.

netCDF [NCL] Variable model

f = addfile(“foo.nc”, “r”) ; grb/hdfx = f->X

XScalar

or Array

attributeslong_name_FillValue

unitsadd_offset

scale_factoretc. values

Scalar or

Array

attributeslong_name_FillValue

unitsadd_offset

scale_factoretc.

accessed via @ accessed via &

timelevlatlonetc.

coordinates timelevlatlonetc.

coord var

NCL reads the scalar/array, attributes, and coordinate

variables as an object

X

Page 37: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Interactive: Variable_2

http://www.ncl.ucar.edu/Training/Workshops/interactive.shtml named dimensions create a variable data-object [structure] from scratch standard and coordinate subscripting reordering via named dimensions

Page 38: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Arrays

• row major ….. like C left dimension varies slowest; right varies fastest dimension numbering left to right [0,1,..]

• indicies [subscripts] are zero based [0,N-1]

Consider T(time,lat,lon) left dimension is 0 [ T!0 ] middle dimension is 1 [ T!1 ] right dimension is 2 [ T!2 ]

Page 39: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Variable Shaping

• transpose, thin, reorder dimensions

• functions may require data in specific order– map plot functions want array order T(...,lat,lon)

• can and should be done without loops– use NCL syntax or functions – very fast for variables in memory

• how? … two approaches: let T(time,lat,lon) named dimensions: t = T(lat|:, lon|:, time|:) NCL functions:

ndtooned: t1D = ndtooned(T)onedtond: t2D = onedtond(t1D, (/N,M/) )

Page 40: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Variable Subscripting (1 of 3)

Standard Array Subscripting• ranges: start/end and [optional] stride• indices separated by :• omitting start/end index implies default begin/end

Consider T(time,lat,lon)T entire array [ don't use T(:,:,:) ]T(0,:,::5) 1st time index, all lat, every 5th lon T(0,::-1,:50) 1st time index, reverse lat order, 1st

51 lon T(:1,45,10:20) 1st 2 time indices, 46th index of lat,

10-20 indicies of lon

Page 41: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Variable Subscripting 2 of 3)

Coordinate Variable Subscripting• only applies to netCDF conforming variables• same rules apply for ranges, strides, defaults• use curly brackets {…}• standard and coordinate subs can be mixed [if no reorder]

T(:,{-30:30},:) all times/lon, lat -30° to +30° (inclusive)

T(0,{-20},{-180:35:3}) 1st time, lat nearest - 20°, every 3rd lon between -180° and 35°

Page 42: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Variable Subscripting (3 of 3)

Named Dimensions• only used for dimension reordering• indicated by |• dimension names must be used for each

subscript• named/coordinate subscripting can be mixed

Consider T(time,lat,lon)

t = T(lat|:, lon|:, time|:) makes t(lat,lon,time)

t = T(time|:,{lon|90:120},{lat|-20:20}) all times,

90-120° lon, -20-20° lat

Page 43: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Longitude coordinate variable (1D)

Latitude coordinate variable (1D)

Standard and Coordinate Subscripting

Standard:

T(9:13,1:8)

Coordinate:

T({-10:20},{-170:-110})

Combined:

T({-10:20}, 1:8)

Page 44: NCL Introduction Dennis Shea National Center for Atmospheric Research.

Interactive: Variable_3

http://www.ncl.ucar.edu/Training/Workshops/interactive.shtml standard and coordinate subscripting reorder via named dimensions

shape remains the same [same number of dimensions] reshape via ndtooned and onedtond

number of dimensions changes

Page 45: NCL Introduction Dennis Shea National Center for Atmospheric Research.

“printing”• printVarSummary

gives gross overview of a variable

• print same info as printVarSummary prints values

• write_matrix print to standard out or a file format control of numerical output can write to file also

Page 46: NCL Introduction Dennis Shea National Center for Atmospheric Research.

printVarSummary• Print out variable (data object) information

type dimension information coordinate information (if present) attributes (if present)

• printVarSummary (u)

Variable: uType: doubleTotal Size: 1179648 bytes 147456 valuesNumber of Dimensions: 4 Dimensions / Sizes: [time | 1] x [lev | 18] x [lat | 64] x [lon | 128]Coordinates: time: [4046..4046] 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

Page 47: NCL Introduction Dennis Shea National Center for Atmospheric Research.

print (1 of 3)

Variable: TType: floatTotal Size: 32768 bytes 8192 valuesNumber of Dimensions: 2 Dimensions / Sizes: [lat | 64] x [lon | 128]Coordinates:

lat: [-87.86379 .. 87.86379] lon: [ 0. 0 .. 357.1875]Number of Attributes: 2 long_name: Temperature units: C(0,0) -31.7(0,1) -31.4(0,2) -32.3(0,3) -33.4(0,4) -31.3 etc. [entire T array will be printed]

• Prints out all variable information including meta data, values T(lat,lon): print (T)

Page 48: NCL Introduction Dennis Shea National Center for Atmospheric Research.

print (2 of 3)

Variable: T (subsection)Type: floatTotal Size: 256 bytes 64 valuesNumber of Dimensions: 1 Dimensions / Sizes: [lat | 64] Coordinates:

lat: [-87.86379 .. 87.86379]Number of Attributes: 3 long_name: Temperature units: C lon: 109.6875 [ added ](0) -40.7(1) -33.0(2) -25.1 (3) -20.0(4) -15.3 etc.

• can be used to print a subset of array meta data, values T(lat,lon): print( T(:,103) ) or print( T(:,{110}) )

Page 49: NCL Introduction Dennis Shea National Center for Atmospheric Research.

print (3 of 3)

• print with embedded strings no meta data print ( "min(T)="+min(T)+" max(T)="+max(T) )

• sprintf and sprinti provide formatting- often used in graphics- print ( "min(T) = "+ sprintf("%5.2f ", min(T)) )

(0) min(T)=-53.8125 max(T)=25.9736

(0) min(T) = -53.81

• sprinti can left fill with zeros (ex: let n=3)

- fnam = "h" + sprinti ("%0.5i", n) + ".nc"- print("file name = "+fnam)

(0) file name = h00003.nc

Page 50: NCL Introduction Dennis Shea National Center for Atmospheric Research.

write_matrix(x[*][*], fmt, opt)

4.35 4.39 0.27 -3.35 -6.90 4.36 4.66 3.77 -1.66 4.06 9.73 -5.84 0.89 8.46 10.39 4.91 4.59 -3.09 7.55 4.56

.17 3.68 5.08 0.14 -5.63 -0.63 -4.12 -2.51 1.76 -1.43 -4.29 0.07 5.85 0.87 8.65

• pretty-print 2D array (table) to standard out – integer, float, double user format control (fmt) T(N,M), N=7, M=5: write_matrix (T, “5f7.2”, False)

• can also create an ASCII fileopt = Trueopt@fout = “foo.ascii” ; file namewrite_matrix (T, “5f7.2”, opt)