Differences between revisions 2 and 3
Revision 2 as of 2008-11-27 16:20:25
Size: 24160
Comment: Text aus http://icg012/icgIwiki/IsentropicPreprocessor kopiert
Revision 3 as of 2008-11-27 16:23:47
Size: 24175
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
 1. ''What is the isentropic package?''  == What is the isentropic package? ==
Line 9: Line 9:
 1. ''How to get the source code''  == How to get the source code ==
Line 54: Line 54:
 1. ''The utilities''  == The utilities ==
Line 60: Line 60:
  i. ''add_theta''   === add_theta ===
Line 67: Line 67:
  i. ''add_eqlat''   === add_eqlat ===
Line 71: Line 71:
  i. ''add_pv_isobar''   === add_pv_isobar ===
Line 76: Line 76:
  i. ''read_ecmwf''   === read_ecmwf ===
Line 85: Line 85:
 1. ''The main program: isentropic''  === The main program: isentropic ===
Line 97: Line 97:
 1. ''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 101:
  i. ''Variables''   ==== Variables ====
Line 137: Line 137:
  i. ''Arrays''   ==== Arrays ====
Line 161: Line 161:
  i. ''Derived Types''   ==== Derived Types ====
Line 224: Line 224:
  i. ''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)