Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Panel

NetCDF is a binary format for storing arrays of data. For a full list and details of functions and operators on vectors, see NetCDF Functions.

NetCDF

NetCDF stands for Network Common Data Form. NetCDF is an interface for array-oriented data access and a freely-distributed collection of software libraries for C, Fortran, C++, Java, and perl that provide implementations of the interface. The netCDF libraries define a machine-independent format for representing scientific data. Together, the interface, libraries, and format support the creation, access, and sharing of scientific data. For full details on NetCDF, see http://www.unidata.ucar.edu/software/netcdf/ .

...

Metview provides a set of NetCDF handling macro functions, allowing users to apply a number of functions and operators to NetCDF data - see NetCDF Functions.

 

How operators and functions work on NetCDF

NetCDF files can contain a wide variety of data. They can contain a number of data units, e.g. a set of cross section plots, a set of 2D geographical grids, a set of time series or vertical profiles, etc,. Each component of a set is stored in the netCDF file as a separate netcdf variable . The handling of and computations with netCDF files are based on the concept of current variable.

...

NOTE : Like fieldsets, a netCDF resulting from an operation on two other netCDFs, will take the metadata (e.g. date, time, parameter, levels, ...) from the first netCDF.

 

...

Working with multi-variable NetCDF files

Functions and operators working on netCDF files apply only to the current variable. When the netCDF file contains several variables, you need to address each variable separately and explicitly, and apply the function /operator to each in turn. For this purpose, Metview Macro provides functions to query the contents of a netCDF file and to set one of its variables to be the current variable.

...

Example 1 : To operate on a netcdf file which you want to overwrite with the new results

 

Code Block
languagebash
# Derive a cross section of temperature data in a netcdf variable
(...)

# derive the list of netcdf variables
var_list = variables(temp_xs)

# loop over variables and subtract scalar
for i = 1 to count(var_list) do
    setcurrent(temp_xs, i)
    temp_xs = temp_xs - 273.15 # acts on current variable only
end for

...


Example

...

2

...

:

...

To

...

operate

...

on

...

two

...

netcdf

...

files,

...

assigning

...

the

...

result

...

to

...

a

...

third

...

netcdf,

...

you

...

should

...

create

...

the

...

output

...

netcdf

...

first

...

by

...

a

...

simple

...

copying

...

of

...

one

...

of

...

the

...

input

...

netcdfs

...

:

Code Block
languagebash
# Derive cross sections of temperature forecast and analysis
# in two netcdf variables, tfc_xs and tan_xs....

(...)

# derive the list of netcdf variables
var_list = variables(tfc_xs)

# create output netcdf
diff_xs = tfc_xs

# loop over variables and create fc-an difference cross-section
for i = 1 to count(var_list) do
    setcurrent(tan_xs, i)
    setcurrent(tfc_xs, i)
    setcurrent(diff_xs, i)
    diff_xs = tfc_xs - tan_xs
end for 

Extracting

...

NetCDF

...

values

If

...

you

...

need

...

to

...

have

...

access

...

to

...

the

...

data

...

values

...

of

...

a

...

netcdf

...

current

...

variable,

...

you

...

can

...

use

...

function

...

values()

...

:

     val_list = values(netcdf)

which

...

returns

...

a

...

vector

...

with

...

all

...

the

...

values

...

for

...

the

...

current

...

variable.You

...

can

...

then

...

use

...

the

...

Vector

...

functions

...

to

...

manipulate

...

the

...

data.

...

This

...

technique

...

could

...

even

...

be

...

used

...

to

...

create

...

a

...

new

...

Geopoints

...

variable

...

with

...

the

...

netCDF

...

data,

...

or

...

to

...

insert

...

the

...

values

...

into

...

a

...

GRIB

...

field.

 

An

...

alternative

...

method

...

for

...

accessing

...

individual

...

values

...

is

...

to

...

the

...

use

...

the

...

function

...

value()

...

:

    val = value(netcdf, n)

which

...

returns

...

the

...

nth

...

value

...

from

...

the

...

current

...

netcdf

...

variable.