Differences between revisions 3 and 4
Revision 3 as of 2008-11-27 16:23:47
Size: 24175
Comment:
Revision 4 as of 2008-11-27 16:27:41
Size: 24175
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
<<TableOfContents>>
Line 3: Line 4:
 == What is the isentropic package? == == What is the isentropic package? ==
Line 9: Line 10:
 == How to get the source code == == How to get the source code ==
Line 54: Line 55:
 == The utilities == == The utilities ==
Line 60: Line 61:
  === add_theta === === add_theta ===
Line 67: Line 68:
  === add_eqlat === === add_eqlat ===
Line 71: Line 72:
  === add_pv_isobar === === add_pv_isobar ===
Line 76: Line 77:
  === read_ecmwf === === read_ecmwf ===
Line 85: Line 86:
 === The main program: isentropic === === The main program: isentropic ===
Line 97: Line 98:
 === The module: types.f90,nc_routines.f90 and isen_module.f90 === === The module: types.f90,nc_routines.f90 and isen_module.f90 ===
Line 101: Line 102:
  ==== Variables ==== ==== Variables ====
Line 137: Line 138:
  ==== Arrays ==== ==== Arrays ====
Line 161: Line 162:
  ==== Derived Types ==== ==== Derived Types ====
Line 224: Line 225:
  ==== The Subroutines ==== ==== The Subroutines ====

The isentropic package

What is the isentropic package?

  • The isentropic package was developed at the Institute for Stratospheric Chemistry of the Research Center Jülich. It succeeds the formerly used isentropic program of the PP package originally developed at the UK Meteorological Office. Its purpose is to convert four-dimensional data sets containing atmospheric parameters from pressure coordinates to theta coordinates, theta being the potential temperature. Currently, it is possible to convert five types of data sets: assimilated data by the UK Meteorological Offices Unified Model (UKMO data), and ECMWF data sets originating from the German Center for Climatological Research, hereafter called DKRZ, from the NILU data center(NILU), from KNMI (KNMI) and Meteo France (METEO_FRANCE). In order to be processed by the programs of the isentropic package all of the above mentioned data sets have to be converted to netCDF data format first!

How to get the source code

  • The source code of the isentropic package is under the control of the CVS (Concurrent Version System) utility. To get the source code first make sure that the environment variable CVSROOT is set to /usr/local/icg/icg1/archive, then just type

     cvs co isentropic

    This command creates a subdirectory ./isentropic in your current working directory and afterwards checks out the source code to subdirectories of this directory. Change your working directory to the new ./isentropic subdirectory. A directory listing will look like this:

     insgesamt 2216
     drwxr-xr-x   9 icg134   icg1         1024 Jul  7 09:30 ./
     drwxr-xr-x  18 icg134   icg1          512 Jul  4 10:44 ../
     -r--r--r--   1 icg134   icg1           51 Apr 22 08:26 .cvsignore
     drwxr-xr-x   3 icg134   icg1          512 Jul  5 14:17 CVS/
     -r--r-----   1 icg134   icg1         7317 Jul  5 14:17 Makefile
     -r--r-----   1 icg134   icg1          651 Jul  4 11:25 RELEASE.tags
     drwxr-xr-x   3 icg134   icg1          512 Jul 21 10:19 doc/
     -r--r--r--   1 icg134   icg1         6323 Apr 19 15:40 gauss_grid.dat
     drwxr-xr-x   3 icg134   icg1          512 Jul  5 16:24 mod/
     drwxr-xr-x   3 icg134   icg1          512 Jul  5 16:24 obj/
     drwxr-xr-x   3 icg134   icg1          512 Jul  7 09:25 scripts/
     drwxr-xr-x   3 icg134   icg1          512 Jul 20 12:29 source/
     drwxr-xr-x   3 icg134   icg1          512 Jul  3 14:51 templates/

    The isentropic package consists of several files, the most important being described below. Please note that the *.f90 files in ./isentropic/source (and other files) are checked out write-protected. This is done by default to avoid unintentionally changing of the source code. If you want to change the source code, run the

     cvs edit ''filename'' 

    command instead of just changing the file permissions with chmod. When you are finished with editing, please use the command

     cvs unedit ''filename''

    to make the file read-only again. This will abandon your changes and revert to the old version of the file in the repository again. Therefore make sure to commit your changes, if you want to have them applied to the repository. Using the cvs commands edit and unedit notifies a possibly running cvs watching process. After having checked out the source code, just type the command

     make ''target''

    to have the specified part of the package be compiled. Using the target all will result in a compilation of the whole package, the targets add_pv_isobar, add_theta, isentropic, read_ecmwf and add_eqlat will cause the  make command to create the belonging parts of the package. The targets clean and tidy will lead to a removal of all object and executable files or core files, respectively. Target new is a combination of clean and all and will lead to a complete recompilation of the package. Another helpful feature will be introduced by the completing the target TAGS, which creates a tag table for emacs. For a detailed description of the targets please refer to the target section of the Makefile. Please note, that Makefile relies on the mkincl package. If you have not done already check this package out as well.

The utilities

  • There are a lot of utility programs, which help to convert or add data to given data sets, thus preparing data files for the subsequent use of isentropic itself or other procedures like plotting routines. Almost all of these utilities and the program isentropic use the modules types, nc_routines and isen_module. These files contain the declaration of all used global variables and structures together with a lot of different subroutines, which read or write netCDF formatted data, help recognizing and creating common used structures, compute diagnostic physical variables and much more. These module files are described in more detail in section 1.5. Another often used module is dateconv.f90, which contains a lot of date and time converting routines. Although dateconv.f90 is shipped along with the isentropic package, it is not a part of this package and is just supplied for reasons of consistency. The dateconv module is described elsewhere.

    There are several other routines (basically shell scripts) which help to run the package on the Cray. These are job_add, job_isen and job_read.

add_theta

  • The program add_theta is designed to add the diagnostic variable THETA (potential temperature) to data sets of the above described kind. This addition can only be performed if the data set already contains the variable TEMP (temperature). If the data set already contains THETA, the program will stop. If the data set contains a variable named TEMP_DOT (the time derivative of temperature), then the time derivative of theta THETA_DOT will also be computed and added to the data set.

    The program add_theta reads the following values from the input file add_theta.inp: the user name, which should conform to the mail-address name conventions of the Research Center, the class of the files to be modified, e. g. UKMO, DKRZ or NILU, and the names of the files. The program will check the data sets global parameters data_description and data_origin for their contents. The class name will be overwritten by the values found in the data set. If there are no values found in the data set, the given class name will be used. Giving a wrong class name in the latter case will lead to wrong results! Multiple file names can be added to the input file, each one on a single line. Make sure that the last line is completed by a carriage return/line feed!

add_eqlat

  • The program add_eqlat calculates equivalent latitudes for UKMO data sets in isobaric or isentropic coordinates and adds it to the data set. Equivalent and normalized latitudes are computed according to the method of L. Lait. add_eqlat reads from add_eqlat.inp the filename of the input data set and the name of the directory, where it resides.

add_pv_isobar

  • The program add_pv_isobar computes the variable PV_ISOBAR (potential vorticity on isobaric surfaces) for UKMO and ECMWF data sets and adds the variable to the data set. This variable is computed in a different way from the variable PV in isentropic. Nevertheless, if add_pv_isobar is applied to a data set before isentropic, the resulting variables PV_ISOBAR and PV should at least show similar if not identical results. add_pv_isobar reads from add_pv_isobar.inp the user name, the class of the files to be read in and the filename of the input data set. The details for specification of input parameters described for add_theta, e. g. the class names, hold true for add_pv_isobar!

read_ecmwf

  • The program read_ecmwf is used for conversion of ECMWF data originating from the DKRZ, which contain data for a whole month. It reads in the output from the afterburner program supplied by the DKRZ, which converts the original data file written in GRIB format to binary format. This format is read in by read_ecmwf and converted to netCDF format. For more information about the afterburner program please refer to its manual.

    read_ecmwf reads in from read_ecmwf.inp the user name, the name of the input data set and the numerical values for the days of the month to be extracted. The output filenames are generated automatically from the date and the hour of the requested days, e. g. ecmwf_97021412.nc contains data for the 14th of February 1997 noon.

    Since the output data files of afterburner can be very big with file sizes larger than 2 GB, it is recommended to use {\tt afterburner} and read_ecmwf on the Cray. This is due to the fact that files with file sizes larger than 2 GB are currently not supported on the AIX cluster.

The main program: isentropic

  • The program isentropic reads in four-dimensional data sets in netCDF format and converts the data to be on requested isentropic surfaces rather than on isobaric surfaces. This can only be done, if the input data set contains THETA. Therefore the program first checks for the existence of THETA. If this parameter is not contained in the data set, the program will stop with a corresponding message. You should then apply add_theta to the data set to complete it with the desired variable.

    If THETA is contained and the requested theta levels are not completely outside the range of the data set (which will cause the program to stop with a corresponding error message), isentropic will start to convert all variables of the data set into values on isentropic levels. This is done by interpolating all variables onto a maximum of 30 theta levels. If more theta levels are needed, just change the parameter max_tlevel in the file isen_module.f90 and recompile. Additionally the program adds the diagnostic variables PV (potential vorticity) and M (Montgomery stream function) to the output file. The addition of PV can only be performed, if the variables U and V (horizontal wind fields) or RELVOR (relative vorticity) are contained in the input data set. The same holds true for the addition of M, which is only possible when the values for GPH and TEMP are known. If the mentioned requirements are not met, the program will notify you with corresponding messages.

    The program isentropic reads the following values from the input file isentropic.inp: the user name, the class of the files to be read in, number and value of the desired isentropic surfaces and the names of the input and output data sets. The names of the input and the corresponding output data sets must occur on the same line.

    The details for specification of input parameters described for add_theta, e. g. the class names, hold true for isentropic!

The module: types.f90,nc_routines.f90 and isen_module.f90

  • The f90-module types.f90 contains the declaration of all global variables and structures that are shared by most of the above mentioned utilities and programs. The most important are described in the following subsections without going to much into detail.

Variables

  • The most important variables used in the isentropic package are listed in the table below.

    Variable

    Type

    Description

    max_tlevel

    integer

    maximum number of theta levels

    max_coord

    integer

    maximum number of coordinate variables

    anzahl_theta

    integer

    number of requested theta levels

    status

    integer

    contains the status value of netCDF functions

    ncid

    integer

    id of currently used input netCDF file

    nc_out

    integer

    id of currently used output netCDF file

    anz_dim

    integer

    number of dimensions in netCDF file

    anz_var

    integer

    number of variables in netCDF file

    anz_att

    integer

    number of attributes in netCDF file

    dim_id

    integer

    id of currently used dimension

    unlimdimid

    integer

    id of unlimited dimension in netCDF file

    att_id

    integer

    id of currently used attribute

    laenge

    integer

    length of currently used attribute (character string)

    xtype

    integer

    type of currently used variable (see netCDF manual for further reference)

    temperatur_index

    integer

    index of variable TEMP in current netCDF file

    theta_index

    integer

    index of variable THETA in current netCDF file

    temp_dot_index

    integer

    index of variable TEMP_DOT in current netCDF file

    u_index

    integer

    index of variable U in current netCDF file

    v_index

    integer

    index of variable V in current netCDF file

    phi_index

    integer

    & index of variable GPH in current netCDF file

    rv_index

    integer

    index of variable RELVOR in current netCDF file

    ex_input

    logical

    .true., if input file *.inp exists

    pv_berechnet

    logical

    .true., if PV has been computed

    m_berechnet

    logical

    .true., if M has been computed

    file_in

    character*60

    name of input data file

    file_out

    character*60

    name of output data file

    datensatz

    character*10

    name of file class

    daten_herkunft

    character*512

    origin of data

    daten_beschreibung

    character*512

    data description

    pi_name

    character*60

    name of principal investigator

Arrays

  • The most important arrays used in the isentropic package are listed in the table below.

    Array

    Type

    Dimension

    Description

    var_dim

    integer

    max_coord

    dimensions of current variable

    var_dim_isen

    integer

    max_coord

    dimensions of current variable in isentropic coordinates

    var_dim_rr

    integer

    max_coord

    dimensions of current variable on regular grid

    coord_id

    integer

    max_coord

    ids of coordinates of current netCDF file

    att_int

    integer

    anz_att

    global integer attributes

    elements

    integer

    8

    time parameters

    anfang

    integer

    4

    starting time levels for output

    zaehler

    integer

    4

    counter of time levels for output

    att_name

    character*30

    anz_char

    global attribute names

    att_text

    character*512

    anz_char

    contents of global attributes

    params

    character*30

    anzahl_parameter_attribute

    name of global attributes

    inhalt_params

    character*60

    anzahl_parameter_attribute

    contents of global attributes

    theta_alloc

    real

    1

    requested theta levels

    position

    real

    4

    pressure field in isentropic coordinates

    dthetaoverdp

    real

    3

    array containing d Theta/d p in isobaric coordinates

    d_theta_over_d_p

    real

    3

    array containing d Theta/d p in isentropic coordinates

    dthetaoverdz

    real

    3

    array containing d Theta/d z in geometrical height coordinates

Derived Types

  • Most of the information read in from the data files and written to the output is stored in form of complex structures, the so-called derived types. These are made up of scalars and allocatable arrays and various kinds of pointers. In isentropic three different derived types are used. First of all there is the type daten, in which all information concerning the variables such as PV are stored. The structure looks like

      type daten
         character :: name*30                         ! variable name
         integer :: var_id                            ! variablen id
         integer :: anz_dim                           ! number of dimensions
         integer, pointer :: dim_id(:)                ! dimensionen ids
         integer, pointer :: dim_len(:)               ! dimensions
         integer :: var_type                          ! variable type
         integer :: anz_att                           ! total number of attributes
         integer :: anz_char_att                      ! number of character attributes
         integer :: anz_int_att                       ! number of integer attributes
         integer :: anz_float_att                     ! number of real attributes
         integer :: anz_double_att                    ! number of double attributes
         integer, pointer :: xtype_vektor(:)          ! contains sequence of attribute types
         character, pointer :: var_attname(:) *30     ! character attribute names
         character, pointer :: var_atttext(:) *512    ! character attribute contents
         character, pointer ::var_iattname(:) *30     ! integer attribute names
         integer, pointer :: var_iatttext(:)          ! integer attribute contents
         character, pointer :: var_fattname(:) *30    ! real attribute names
         real, pointer :: var_fatttext(:)             ! real attribute contents
         character, pointer :: var_dattname(:) *30    ! double attribute names
         double precision, pointer :: var_datttext(:) ! double attribute contents
         real, pointer :: analyse(:,:,:,:)            ! data
      end type daten

    All variables of the input data are stored in an array with this type of structure named ecmwf, which is allocated during runtime. In the case of ECMWF input data, which reside on a horizontal gaussian grid, the variables are first interpolated onto a regular equidistant horizontal grid. The result is stored in the structure ecmwf_rr.

    As for the UKMO data, only THETA_DOT is interpolated onto a different horizontal grid. This is done because the variables in the UKMO data sets are defined on two separate, staggered grids. All other variables are just copied from ecmwf to ecmwf_rr.

    After interpolating the data onto the requested isentropic levels, the results are stored in the structure ecmwf_isen, which contains all variables from ecmwf but THETA, which is substituted by PRESS. Additionally the new structure contains the new variables PV and M, if all conditions above mentioned are met.

    The other structures used are the derived types koordinaten, for the spatial coordinate variables, and zeit_koordinaten, for the time coordinate variable. They only differ from one another in the pointer feld, which is a real pointer in koordinaten and a double precision pointer in zeit_koordinaten.

      type koordinaten
         character :: name*30                          ! coordinate name
         integer :: coord_id                           ! coordinate id
         integer :: dim_len                            ! dimension
         integer :: anz_att                            ! total number of attributes
         integer :: anz_char_att                       ! number of character attributes
         integer :: anz_int_att                        ! number of integer attributes
         integer :: anz_float_att                      ! number of real attributes
         integer :: anz_double_att                     ! number of double attributes
         integer, pointer :: xtype_vektor(:)           ! contains sequence of attribute types
         character, pointer :: coord_attname(:)*30     ! character attribute names
         character, pointer :: coord_atttext(:)*60     ! character attribute contents
         character, pointer :: coord_iattname(:)*30    ! integer attribute names
         integer, pointer :: coord_iatttext(:)         ! integer attribute contents
         character, pointer :: coord_fattname(:)*30    ! real attribute names
         real, pointer :: coord_fatttext(:)            ! real attribute contents
         character, pointer :: coord_dattname(:)*30    ! double attribute names
         double precision, pointer :: coord_datttext(:)! double attribute contents
         real, pointer :: feld(:)                      ! data
      end type koordinaten

    The coordinate variables are latitude, longitude, pressure and time for ECMWF input files and latitude1, latitude2, longitude1, longitude2, pressure and time for UKMO data sets. This is due to the fact that UKMO data are on a staggered grid.

The Subroutines

  • The modules nc_routines and isen_module contain a multitude of subroutines for different purposes. From version isentropic-2.2 (Tag isentropic-rel-2.2) on some of the subroutines have been moved from the modules to the files containig the main routines of the utilities if they were only used by that specific program. They can still be found using the tag tabel (e. g. from within emacs). In the following they are listed with a short description.

    Subroutine

    Description

    abfrage_global

    Inquires the input data file for global attributes

    kopiere_global

    Copies global attributes from input to output file

    aendere_global

    Changes global parameters in output file

    lese_koordinaten

    Reads allcoordinate variables from ECMWF input data

    lese_ukmo_koordinaten

    Reads all coordinate variables from UKMO input data

    lese_variablen

    Reads all variables from ECMWF input data

    lese_ukmo_variablen

    Reads all variables from UKMO input data

    diagnostic

    Prints diagnostics like minval and maxval

    neue_koordinaten

    Creates new coordinate variables for ECMWF data sets

    neue_ukmo_koordinaten

    Creates new coordinate variables for UKMO data sets

    neue_variablen

    Creates output for ECMWF data sets

    neue_ukmo_variablen

    Creates output for UKMO data sets

    erzeuge_variablen

    Obsolete

    erzeuge_struktur

    Creates new variables for ECMWF data sets

    erzeuge_ukmo_struktur

    Creates new variables for UKMO data sets

    erzeuge_regulaeres_gitter

    Horizontal interpolation from gaussian to UKMO grid using splines

    erzeuge_regulaeres_t106

    Horizontal interpolation from gaussian to equidistant grid with T106 resolution using splines

    erzeuge_regulaere_struktur_nilu

    Creates new variables for ECMWF data sets from NILU

    erzeuge_ukmo_arakawa_b

    Horizontal Interpolation from Arakawa-C to Arakawa-B grid (only for THETA_DOT)

    interpolation_auf_thetaflaechen

    Vertical interpolation on theta levels using splines.

    druckhoehen

    Vertical interpolation of requested theta levels on pressure using splines.

    druckhoehen_linear

    Vertical interpolation of requested theta levels on pressure using logarithmic interpolation.

    intpol_auf_thetaflaechen_lin

    Vertical interpolation on theta levels using logarithmic interpolation.

    grid2_to_grid1

    Utility of erzeuge_regulaeres_t106

    berechne_pv

    Calculation of PV (straight forward)

    anfuegen_pv

    Adds PV to output file

    berechne_dthetaoverdp

    Calculation of d Theta/d p on isentropic surfaces

    berechne_dthetaoverdz

    Calculation of d Theta/d p in geometrical height coordinates

    berechne_montgomery

    Calculation of Montgomery stream function on isentropic surfaces

    anfuegen_montgomery

    Adds M to output file

    berechne_pv_isobar

    Calculation of PV on isobaric surfaces

    berechne_pv_aus_rv

    Calculation of PV with RELVOR for ECMWF data sets (DKRZ)

    berechne_pv_pp

    Calculation of PV as in PP package on isentropic surfaces

    freigabe

    releases allocated memory before reading next input file

    berechne_pv_isobar_pp

    Calculation of PV as in PP package on isobaric surfaces

    berechne_pv_nilu

    Calculation of PV for ECMWF data sets (NILU)

    ueberpruefe_herkunft

    Checks data_origin


History of Changes

isentropic (last edited 2010-04-30 09:47:20 by NicoleThomas)