Next: , Previous: Arrays and hyperslabs, Up: ncap2 netCDF Arithmetic Processor


4.1.6 Attributes

Attributes are referred to by var_nm@att_nm
All the following are valid statements

     global@text="Test Attributes";  /* Assign a global variable attribute */
     a1[$time]=time*20;
     a1@long_name="Kelvin";
     a1@min=a1.min();
     a1@max=a1.max();
     a1@min++;
     --a1@max; q
     a1(0)=a1@min;
     a1($time.size-1)=a1@max;
     

A value list can be used on the RHS of an assign...

     a1@trip1={ 1,2,3 } ;
     a1@triplet={ a1@min, (a1@min+a1@max)/2, a1@max };

The netcdf specification allows all attribute types to have a size greater than one. The maximum is defined by NC_MAX_ATTRS -The following is an ncdump of the meta-data for variable a1

     double a1(time) ;
       a1:long_name = "Kelvin" ;
       a1:max = 199. ;
       a1:min = 21. ;
       a1:trip1 = 1, 2, 3 ;
       a1:triplet = 21., 110., 199. ;

The size() method can be used with attributes -for example to save an attribute text string in a variable..

     defdim("sng_len", a1@long_name.size());
     sng_arr[$sng_len]=a1@long_name;         // sng_arr now contains "Kelvin"

Attributes defined in a script are stored in memory and are written to Output after script completion. To stop the attribute being written use the ram_delete() method or use a bogus variable name

Attribute Propagation & Inheritance

     prs_mdp[time,lat,lon,lev]=P0*hyam+hybm*PS;      //prs_mdp get attributes from PO
     th_min=1.0 + 2*three_dmn_var_dbl.min($time);    //th_min get attributes from three_dmn_var_dbl

If the attribute name contains non-regular characters use ID quoting. See see ID Quoting

     'b..m1@c--lost'=23;