N routines

All GAMAP Routines

List routines by category:
Atmospheric Sciences | Benchmarking | Color | Date/Time | Doc | File & I/O | BPCH Format | Scientific Data Formats | GAMAP Examples | GAMAP Internals | GAMAP Utilities | GAMAP Data Manipulation | GAMAP Models & Grids | GAMAP Plotting | General | Graphics | Math & Units | Plotting | Regridding | Strings | Structures | Time Series

List routines by alphabetical order:
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

Last modified: Tue Apr 4 10:50:26 2017.


List of Routines


Routine Descriptions

NCDF_GET

[Next Routine] [List of Routines]
 NAME:
        NCDF_GET

 PURPOSE:
        Convenience routine to read data into netCDF format.

 CATEGORY:
        File & I/O, Scientific Data Formats

 CALLING SEQUENCE:
        DATA = NCDF_GET( FID, NAME [, Keywords ] )

 INPUTS:
        FID -> netCDF File ID, as returned by routine NCDF_OPEN.

        NAME -> Name under which the data array will be saved 
             to the netCDF file.  

 KEYWORD PARAMETERS:
        VARINFO -> Returns a structure containing information
             about the variable read in from disk.  The structure
             has the following form:

             { NAME      : "", $
               DATATYPE  : "", $
               NDIMS     : 0L, $
               NATTS     : 0L, $
               DIM       : LONARR(NDIMS) }


        LONGNAME -> Returns the value saved under the "long_name" 
             attribute in the netCDF file.

        UNIT -> Returns the value of the "unit" attribute 
             saved in the netCDF file.

        RANGE -> Returns the value of the "valid_range" 
             saved in the netCDF file

        _EXTRA=e -> Picks up extra keywords got NCDF_VarGet.

 OUTPUTS:
        DATA -> Array containing extracted data from the netCDF file.

 SUBROUTINES:
        Uses the following IDL netCDF routines:
        ========================================
        NCDF_VarId   (function)  NCDF_VarGet
        NCDF_VarInfo (function)  NCDF_AttGet
        NCDF_AttName (function)

 REQUIREMENTS:
        Need to use a version of IDL w/ netCDF routines installed.

 NOTES:
        (1) Only looks for the "long_name", "unit", and "valid_range"
            attributes.  The user can extend this as he/she desires.
            For a more general program, see ~/IDL/tools/ncdf_read.pro
            by Martin Schultz.

 EXAMPLE:

        ; Define array to write to file
        ARRAY = DIST( 100, 50 )

        ; Find out if netCDF is supported on this platform
        IF ( NCDF_EXISTS() eq 0 ) then MESSAGE, 'netCDF not supported!'

        ; Open netCDF file and get the file ID # (FID)
        FID   = NCDF_OPEN( 'myfile.nc' )
        IF ( FID lt 0 ) then Message, 'Error opening file!'

        ; Read data from the netCDF file
        ; Return data attributes in the VARINFO array
        ; Also returns the text from the UNIT string
        DATA = NCDF_GET( FID, 'BIOBSRCE::NOx', $
                         VARINFO=VARINFO, UNIT=UNIT ) 

        ; Close the netCDF file
        NCDF_CLOSE, FID

 MODIFICATION HISTORY:
        bmy, 22 May 2002: TOOLS VERSION 1.50
        bmy, 21 Oct 2003: TOOLS VERSION 1.53
                          - If we can't find a netCDF variable name,
                            then try again using a "sanitized" name
                            w/ all bad characters stripped out
        bmy, 28 Jun 2007: TOOLS VERSION 2.06
  bmy & phs, 13 Jul 2007: GAMAP VERSION 2.10
                          - Added /VERBOSE keyword to reduce
                            warning messages

(See /n/home09/ryantosca/IDL/gamap2/file_io/ncdf_get.pro)


NCDF_READ

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
        NCDF_READ

 PURPOSE:
        Open a netCDF file and read data from it. The data is 
        returned as a structure whose tag names are the names of 
        the variables with blanks etc. replaced. If no variables 
        are specified with the VARIABLES keyword, only dimensional 
        information is returned. You can load all variables using
        the ALL keyword. Other keyword options include OFFSET, COUNT, STRIDE,
        NO_DIMENSIONS, NO_STRUCT, DIMNAMES, VARNAMES, VARDIMS, ATTRIBUTES.
        Thus, this program includes ncdump functionality.
        If no filename is given, a file selection dialog is
        opened with the default mask '*.nc'. The name of the selected
        file is returned in the TRUENAME keyword. A file selection
        dialog also appears when the file cannot be found (see
        OPEN_FILE.PRO). This can be turned off with the NO_DIALOG
        keyword. The VERBOSE keyword provides information while
        analyzing and reading the file.

 AUTHOR:
        Dr. Martin Schultz
        Max-Planck-Institut fuer Meteorologie
        Bundesstr. 55, D-20146 Hamburg
        email: martin.schultz@dkrz.de
        
 CATEGORY:
        File & I/O, Scientific Data Formats

 CALLING SEQUENCE:
        NCDF_READ, result, filename=, truename=,
            variables=, all=, varnames=, 
            vardimid=, vardims=, attributes=,
            count=, offset=, stride=, 
            dimnames=, dims=, no_dimensions=,
            no_struct=, no_dialog=, verbose=, title=

 ARGUMENTS:
        RESULT(out) -> a structure containing all the variable data
             from the netCDF file. If only one variable is specified 
             and the NO_STRUCT keyword set, then RESULT will be an
             array instead of a structure. Use the ALL keyword
             to load all variables at once. Note, that the COUNT, OFFSET,
             and STRIDE keywords can affect the size of RESULT.
             RESULT is set to -1L if an error occurs before the structure
             has been built. You can use CHKSTRU.PRO to test for this.

 KEYWORD PARAMETERS:
        FILENAME(in) -> the name of the netCDF file to be opened.
             NCDF_READ uses OPEN_FILE to check the validity of
             the file first. You can specify a search mask
             instead of a filename in which case a file selection
             dialog is displayed (unless you set the NO_DIALOG
             keyword). The TRUENAME keyword contains the name
             of the selected file or an empty string if the
             file selection was canceled.

        TRUENAME(out) -> the (fully qualified) name of the file selected
             with the file selection dialog or an unaltered copy
             of FILENAME if FILENAME is a valid filename.

        VARIABLES(in) -> a string array containing the names of variables
             for which data shall be read. Default is to read 
             only the dimensional information from the file. 
             (Currently) no warning is issued if a variable is not in the file.

        ALL(in) -> set this keyword to load all variables stored in the 
             netCDF file. Generally, you cannot usethis keyword together with
             COUNT, OFFSET, and STRIDE.

        VARNAMES(out) -> a string array containing the names of all variables 
             as stored in the file. Note, that the tag names of e.g. the
             result structure are filtered with the Valid_TagName function.
             
        VARDIMID(out) -> a structure with integer arrays containing the 
             dimension ID's for all variables. See also VARDIMS which returns
             the dimensions themselves.

        VARDIMS(out) -> a structure with integer arrays containing the 
             dimensions for all variables in the netCDF file. These are not
             kept in sync with potential COUNT, OFFSET, and STRIDE values,
             but reflect the data sizes as stored in the file.

        ATTRIBUTES(out) -> a structure holding the variable and global
             attributes stored in the netCDF file (global attributes
             are stored in tag name GLOBAL). 

        COUNT(in) -> an integer array containing the number of values to
             be read for each dimension of the variables. Mapping of the
             COUNT dimensions to the variable dimensions is achieved via
             the first entry in the VARIABLES list and the COUNT parameter
             will be applied to all variables that have that dimension. 
             Example: The first variable has dimensions LON, LAT, LEV,
             the second variable has dimensions LON, LAT, and the third
             variable has LAT, LEV. A COUNT of [40,20,10] would lead to
             result dimensions of [40,20,10], [40,20], and [20,10].

        OFFSET(in) -> an integer array containing the offsets for each
             dimension of the variables to be read. Dimension mapping
             is the same as for COUNT.

        STRIDE(in) -> an integer array containing the stride for each
             dimension of the variables to be read. Dimension mapping
             is the same as for COUNT.
             
        DIMNAMES(out) -> a string array containing the names of the 
             dimensions stored in the netCDF file.

        DIMS(out) -> a long array containing the dimension values. Purely
             for convenience. Use VARDIMS to retrieve the dimensions of
             the variables.

        TITLE(in) -> A title for the file selection dialog if an
             incomplete or incorrect filename is specified. This
             keyword is ignored if the no_dialog keyword is set.

        NO_DIMENSIONS(in) -> set this keyword if you do not want to store
             the dimensional variables from the file in the result structure. 
             DIMNAMES and DIMS will still be retrieved.

        NO_STRUCT(in) -> if only one variable is selected with the
             VARIABLE keyword, you can set this keyword to return only
             the data for this variable as an array. This keyword implies
             the functionality of NO_DIMENSIONS.

        NO_DIALOG(in) -> set this keyword if you do not want interactive 
             behaviour when a file mask is given instead of a filename or
             when the specified file does not exist.

        VERBOSE(in) -> set this keyword to get detailed information while
             reading the netCDF file.

 SUBROUTINES:
        Valid_TagName : replaces invalid characters in variable names so that
            a structure can be built.
      
        ncdf_attributes : retrieves global and variable attributes from netcdf
            file and stores them as structure.

        ncdf_dimensions : retrieves size and name for all dimensions in netcdf file.

        ncdf_varnames : retrieves names and dimension information for all variables
            in the netCDF file.

        ncdf_mapdims : map dimension indices for COUNT, OFFSET, and STRIDE with 
            dimensions of first selected variable.

        ncdf_TestDimensions : compute the COUNT, OFFSET, and STRIDE vectors that
            must be applied for retrieving the data of one variable.

 REQUIREMENTS:
        uses OPEN_FILE and STRREPL.

 NOTES:
        Correct handling of dimensional information requires that the variables
        storing the dimension values have the same name as the dimensions
        themselves - a common feature in most netCDF standards.

        I am still working on a netcdf file object which will be even
        more powerful. At some point ncdf_read will only be a
        procedure interface to this objec!

 EXAMPLE:
        ncdf_read,result,/All
        ; plot ozone vs. temperature
        plot,result.temperature,result.ozone

 MODIFICATION HISTORY:
        mgs, 18 Sep 1999: VERSION 1.00
        mgs, 29 Feb 2000: - added variables keyword
                          - added CATCH error handler
        mgs, 21 Mar 2000: - bug fix for tag names
        mgs, 09 May 2000: VERSION 2.00
                          - now only reads dimensions as default
                          - added ALL keyword to compensate
                          - returns dimnames and attributes
                            (makes ncdf_detail obsolete)
                          - added COUNT, OFFSET and STRIDE keywords
                          - added NO_DIMENSIONS and NO_DIALOG
                            keywords and more
        mgs, 22 Aug 2000: - added title keyword
        bmy, 22 May 2002: GAMAP VERSION 1.50
                          - Now replace ":", "=", "#" with "_" in
                            structure tag names, so IDL won't choke
        bmy, 21 Oct 2003: GAMAP VERSION 1.53
                          - also replace "(" and ")" in tag names
                          - replace "$" with "S" (close to dollar sign)
                          - replace "*" with "A" (for Asterisk)
  bmy & phs, 13 Jul 2007: GAMAP VERSION 2.10
 

(See /n/home09/ryantosca/IDL/gamap2/file_io/ncdf_read.pro)


NCDF_SET

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
        NCDF_SET

 PURPOSE:
        Convenience routine to write data into netCDF format.

 CATEGORY:
        File & I/O, Scientific Data Formats

 CALLING SEQUENCE:
        NCDF_SET, FID, DATA, NAME, DIMS [, Keywords ]

 INPUTS:
        FID -> netCDF File ID, as returned by routine NCDF_CREATE.

        DATA -> Data (array or scalar) to be written to netCDF file.

        NAME -> Name under which the data array will be saved 
             to the netCDF file.  

 KEYWORD PARAMETERS:
        LONGNAME -> Longer descriptive name for the data.  
             This will be saved as the "long_name" attribute.  

        RANGE -> A 2-element vector containing the [min,max] of
             the data array.  If not passed, RANGE will be computed
             (but only if DATA is a numeric type).  RANGE is saved 
             to the netCDF file as the "valid_range" attribute.

        UNIT -> String containing the units of the data. 
             This will be saved as the "unit" attribute.       

        _EXTRA=e -> Picks up extra keywords

 OUTPUTS:
        None

 SUBROUTINES:
        Uses the following routines:
        =====================================================
        NCDF_Control    NCDF_VarDef     (function)
        NCDF_AttPut     DATATYPE        (function from TOOLS)
        NCDF_VarPut     NCDF_VALID_NAME (function from TOOLS)   

 REQUIREMENTS:
        Need to use a version of IDL w/ netCDF routines installed.

 NOTES:
        (1) For now, treat BYTE data like CHAR data.  This is
            most likely since netCDF does not support STRING types,
            strings have to be stored as arrays of bytes.

 EXAMPLE:

        ; Define array to write to file
        ARRAY = DIST( 100, 50 )

        ; Find out if netCDF is supported on this platform
        IF ( NCDF_EXISTS() eq 0 ) then MESSAGE, 'netCDF not supported!'

        ; Open netCDF file and get the file ID # (FID)
        FID = NCDF_CREATE( 'myfile.nc', /CLOBBER )
        IF ( FID lt 0 ) then Message, 'Error opening file!'

        ; Set dimensions for netCDF file
        S    = SIZE( ARRAY, /DIM ) 
        DIM1 = NCDF_DIMDEF( FID, 'Length', S[0] )
        DIM2 = NCDF_DIMDEF( FID, 'Width',  S[1] )

        ; Go into netCDF DATA mode
        NCDF_CONTROL, FID, /ENDEF

        ; Call NCDF_SET to write the array to the file
        NCDF_SET, FID, ARRAY, 'My Data', [ DIM1, DIM2 ], $
                  LONGNAME='Data array created by me!',  $
                  UNIT='unitless'

        ; Close the netCDF file
        NCDF_CLOSE, FID

 MODIFICATION HISTORY:
        bmy, 19 Apr 2002: TOOLS VERSION 1.50
        bmy, 10 Sep 2002: TOOLS VERSION 1.51
                          - Now call routine DATATYPE to determine
                            the type of the data so that we can
                            write to the netCDF file appropriately
                          - Don't add the RANGE attribute to
                            the netCDF file for a string type value.
                          - Updated comments 
        bmy, 21 Oct 2003: TOOLS VERSION 1.53
                          - now "sanitize" the netCDF variable name
                            w/ routine NCDF_VALID_NAME.  The new netCDF
                            library in IDL 6.0+ chokes on bad characters.
  bmy & phs, 13 Jul 2007: GAMAP VERSION 2.10

(See /n/home09/ryantosca/IDL/gamap2/file_io/ncdf_set.pro)


NCDF_VALID_NAME

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
        NCDF_VALID_NAME

 PURPOSE:
        Strips invalid characters from a string which is to be
        used as a netCDF variable name.  Based on original code
        by Martin Schultz.

 CATEGORY:
        File & I/O, Scientific Data Formats

 CALLING SEQUENCE:
        RESULT = NCDF_VALID_NAME( ARG )

 INPUTS:
        ARG -> netCDF variable name string to be examined.

 KEYWORD PARAMETERS:
        None

 OUTPUTS:
        RESULT -> New netCDF name string with "bad" characters
             replaced by "good" characters.

 SUBROUTINES:
        External Subroutines Used:
        ==========================
        STRREPL (function)

 REQUIREMENTS:
        None

 NOTES:
        In IDL 6.0+, the netCDF library has been updated.  Some
        characters which used to be allowed in netCDF variable names
        are no longer allowed.  Therefore, use this function to
        replace "bad" characters with "good" characters when 
        reading or writing to/from netCDF files.

 EXAMPLE:
        RESULT = NCDF_VALID_NAME( 'IJ-AVG-$::CO' )
        PRINT, RESULT

             ; Prints "IJ-AVG-S__CO"

 MODIFICATION HISTORY:
        bmy, 21 Oct 2003: VERSION 1.00
  bmy & phs, 13 Jul 2007: GAMAP VERSION 2.10

(See /n/home09/ryantosca/IDL/gamap2/file_io/ncdf_valid_name.pro)


NUMDEN

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
        NUMDEN

 PURPOSE:
        Calculates the number density of air for a given temperature 
        and pressure.

 CATEGORY:
        Atmospheric Sciences

 CALLING SEQUENCE:
        RESULT = NUMDEN( T, P, /DOUBLE )

 INPUTS:
        T -> Temperature (or vector of temperatures) in K.

        P -> Pressure (or vector of pressures) in hPa.  
             Default is 1000 hPa.

 KEYWORD PARAMETERS:
        /DOUBLE -> Set this switch to return the number density
             in double precision.  Default is to return the number
             density in single precision.

 OUTPUTS:
        RESULT -> Number density of air in molec/cm3.  If T and 
             P are vectors, then RESULT will be a vector of
             number densities

 SUBROUTINES:
        None

 REQUIREMENTS:
        None

 NOTES:
        None

 EXAMPLES:
        (1)
        PRINT, NUMDEN( 298.0, 1013.0 )
          2.46206e+19

             ; Prints the number density of air 
             ; at 298K and 1013 hPa.
         
        (2)
        PRINT, NUMDEN( 298.0, 1013.0, /DOUBLE )
          2.4620635e+19

             ; Prints the number density of air ; at 298K and 
             ; 1013 hPa.  Computation is done in double precision.


 MODIFICATION HISTORY:
        dbm, 30 Jul 2007: GAMAP VERSION 2.10
        phs,  1 Sep 2009: GAMAP VERSION 2.13
                          - let you pass array  

(See /n/home09/ryantosca/IDL/gamap2/atm_sci/numden.pro)


NYMD2TAU (FUNCTION)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
        NYMD2TAU (function)

 PURPOSE:
        Computes the value of TAU, which is the elapsed hours between
        the current date/time and the beginning of an epoch. This is
        the starting date for 3D model data assimilation.

 CATEGORY:
        Date & Time

 CALLING SEQUENCE:
        RESULT = NYMD2TAU( NYMD, [NHMS [,NYMD0, NHMS0]] )

 INPUTS:
        NYMD (long)  -> YY/MM/DD for this date (e.g. 940101)
                  You can either specify year as 4 digits or 2 digits.
                  With 2 digits, year < 50 will be assumed to be 2000+YY.A

        NHMS (long)  -> HH/MM/SS for this date (e.g. 060000)
                  will be defaulted to 000000

        NYMD0 (long) -> YY/MM/DD for the start of the epoch
                  default is {19}850101 which is the GEOS-1 start

        NHMS0 (long) -> HH/MM/SS for the start of the epoch
                  will be defaulted to 000000
        
 KEYWORD PARAMETERS:
        /GEOS1 -> use 1985/01/01 as epoch start

        /GISS_II -> use 1980/01/01 as epoch start

 OUTPUTS:
        RESULT -> The function returns the TAU value as a 
             double-precision number

 SUBROUTINES:
        NYMD2STRU : extracts year, month, day, hour, minute and seconds from
            NYMD and NHMS values.

        JULDAY (IDL user library procedure)

 REQUIREMENTS:

 NOTES:
        Function NYMD2STRU is also contained in function TAU2YYMMDD.
        Take care when changes are necessary !

 EXAMPLE:
        ; (1) Compute TAU value for 0h on Jan 1, 1994, with the 
        ;     epoch starting on 0h on Jan 1, 1980 (GISS II value).
        ;
        TAU = nymd2tau( 940101L, 0L, 800101L, 0L )

        ; (2) Compute TAU value for 0h on Jan 1, 1994, for the 
        ;     default GEOS-1 epoch (850101L, 0L).
        ;
        TAU = nymd2tau( 940101L, 0L )

        ; (3) Compute GISS model II tau values for the first of
        ;     each month in 1990
        date = [ 900101L, 900201L, 900301L, 900401L, 900501L, 900601L, $
                 900701L, 900801L, 900901L, 901001L, 901101L, 901201L ]

        tau = nymd2tau(date,/GISS)


 MODIFICATION HISTORY:
        bmy, 26 Mar 1998: VERSION 1.00
        mgs, 26 Mar 1998: - now year 2000 compliable 
        mgs, 23 Mar 1999: - now handles vectors as input
        bmy, 23 Mar 2005: GAMAP VERSION 2.03
                          - Added /NO_Y2K keyword to suppress 
                            special Y2K treatment of dates (i.e.
                            treat dates w/ 2 digits as from 1900's)
                          - renamed internal function NYMD2STRU to
                            N2T_NYMD2STRU to avoid conflict with
                            similar function in "tau2yymmdd.pro"
  bmy & phs, 13 Jul 2007: GAMAP VERSION 2.10

(See /n/home09/ryantosca/IDL/gamap2/date_time/nymd2tau.pro)


N_UNIQ (FUNCTION)

[Previous Routine] [List of Routines]
 NAME:
        N_UNIQ (function)

 PURPOSE:
        Returns the number of unique elements in an array.

 CATEGORY:
        General

 CALLING SEQUENCE:
        Result = N_UNIQ( Arr )

 INPUTS:
        ARR -> The array to be searched for unique values.

 KEYWORD PARAMETERS:
        None

 OUTPUTS:
        Returns the number of unique values in ARR as the value
        of the function

 SUBROUTINES:
        None

 REQUIREMENTS:
        None

 NOTES:
        None

 EXAMPLES:
        (1)
        PRINT, N_UNIQ( [10, 20, 30] )
           3

        (2)
        PRINT, N_UNIQ( [10,10] )
           1

 MODIFICATION HISTORY:
        bmy, 17 Nov 1998: VERSION 1.00
        mgs, 17 Nov 1998: - little streamlining
        mgs, 16 Mar 1999: - don't print out warning for empty argument
                            and return 0 instead of -1
  bmy & phs, 13 Jul 2007: GAMAP VERSION 2.10

(See /n/home09/ryantosca/IDL/gamap2/general/n_uniq.pro)